Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyMongo使用子项在游标对象上迭代_Python_Mongodb_Pymongo - Fatal编程技术网

Python pyMongo使用子项在游标对象上迭代

Python pyMongo使用子项在游标对象上迭代,python,mongodb,pymongo,Python,Mongodb,Pymongo,下面的函数用于搜索包含子项项目的集合。如果有一个子项的isManager设置为1,则它应返回True,否则它将始终返回False def isMasterProject(self, pid, uid): masterProjects = False proj = self.collection.find({ "_id": uid, "projects": { '$elemMatch': { "projectId": _byid(pid), "isManager": 1 } } })

下面的函数用于搜索包含子项项目的集合。如果有一个子项的
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
\u 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:
仅当给定的条件与文档匹配时才应返回结果,因此您应仅从符合条件的查找返回光标

既然您在查询中使用的是
\u id
,并且只希望得到一个结果,那么为什么不使用findOne和捷径一步呢


另一个gotcha对于新成员,请注意,您在这里返回的是整个文档,而不是仅包含数组匹配元素的某些表示。不匹配的内容仍将存在,然后通过重复这些内容期望得到不同的结果,这会让您感到悲伤。

Perfect-感谢您参考/提醒elemMatch文档。我完全同意findOne,并相应地更新了我的定义和我的lame key迭代,它似乎已经完成了这个技巧。再次感谢@neil lunn