![](/img/trans.png)
[英]Efficient way to iterate over cursor object with Pymongo / MongoDB
[英]pyMongo iterate over cursor object with subitems
下面的函數搜索帶有子項目項目的集合。 如果isManager
設置為1的子項目,則應返回True
否則將始終返回False
。
def isMasterProject(self, pid, uid):
masterProjects = False
proj = self.collection.find({ "_id": uid, "projects": { '$elemMatch': { "projectId": _byid(pid), "isManager": 1 } } })
for value in proj:
if str(value['projects']['projectId']) == pid:
if value['projects']['isManager'] == 1:
masterProjects = True
return masterProjects
_byid
等效於ObjectId
它似乎總是返回False
。 這是一個集合的例子。
{
"_id" : ObjectId("52cf683306bcfc7be96a4d89"),
"firstName" : "Test",
"lastName" : "User",
"projects" : [
{
"projectId" : ObjectId("514f593c06bcfc1e96f619be"),
"isManager" : 0
},
{
"projectId" : ObjectId("511e3ed0909706a6a188953d"),
"isManager" : 1
},
{
"projectId" : ObjectId("51803baf06bcfc149116bf62"),
"isManager" : 1
},
{
"projectId" : ObjectId("514362bf121f92fb6867e58f"),
"isManager" : 1
}
],
"user" : "test.user@example.com",
"userType" : "Basic"
}
檢查空的游標會更簡單嗎,如果是的話,我該怎么做?
怎么樣:
obj = next(proj, None)
if obj:
$ elemMatch僅在給定的條件與文檔匹配時才返回結果,因此您僅應從找到條件為真的位置返回游標。
由於您在查詢中使用_id
並且只希望得到一個結果,所以為什么不使用findOne和捷徑一步。
新手的另一個陷阱 ,請注意,您將在此處返回整個文檔,而不是僅包含數組匹配元素的某些表示形式。 不匹配的事物將仍然存在,然后通過迭代這些期望不同的結果將使您感到悲傷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.