用python查找mongo中缺失文档的有效方法

用python查找mongo中缺失文档的有效方法,python,mongodb,pymongo,Python,Mongodb,Pymongo,我遇到了一段代码,这是一个旨在查找mongo DB中缺失值的函数,代码如下: def missing(config, list_of_clients): collection = connect_2_mongo_db("collection", urls[config], users[config], pwd[config]) missing_clients = [] for c in list_of_clients: cursor = collection.fin

我遇到了一段代码,这是一个旨在查找mongo DB中缺失值的函数,代码如下:

def missing(config, list_of_clients):
   collection = connect_2_mongo_db("collection", urls[config], users[config], pwd[config])
   missing_clients = []
   for c in list_of_clients:
      cursor = collection.find({ "ClientID" : c }, {"ClientID" : 1, "_id" : 0 } )
      if len(list(cursor)) == 0:
         missing_clients.append(c)
   return missing_clients
当然,这在时间上非常昂贵,有没有更好的方法可以使用mongo查询一次获取所有缺失的值? _客户端的列表看起来像是[1,2,3],文档看起来像

{
   "ClientID": 2,
   "Address" : "blah blah blah"
   ...
}
{
   "ClientID": 3,
   "Address" : "blah blah blah"
   ...
}

我想知道哪些客户不在基地。在本例中,1

没有mongo实例来尝试此操作。你可以试试这个

def missing(config, list_of_clients):
    collection = connect_2_mongo_db("collection", urls[config], users[config], pwd[config])
    missing=[]
    for c in list_of_clients:
        cursor = collection.find({ClientID: {$nin: c}});
        missing.append(cursor)
    return missing

您可以使用运算符和客户端ID列表查询一次

result = coll.find({
    "clientID": { "$in": list_of_clients }
})
将结果放入列表中

existing_clients=[]
for c in result:
    existing_clients.append(c["clientID"])
最后从这些列表的差异中获取缺少的ID

missing_ids = list(set(list_of_clients)-set(existing_clients))

同样的事情,用列表理解写的

def missing(list_of_clients):
    e = [c["clientID"] for c in coll.find({"clientID":{"$in":list_of_clients}})]
    return list(set(list_of_clients)-set(e))

在mongo中使用@Sohaib$nin返回文档。我想在mongo丢失文件…你说的丢失文件是什么意思?只有
\u id
的?向我们展示您的示例
客户列表>/code>@Van Peer我更新了更多详细信息。这正是我的第一个方法,但我想知道我们是否可以使用mongo查询。否。执行
len(客户列表)
查询。这里是一个query.lol,我的意思是我展示的代码不是我写的(我发现它是这样的),我的第一个方法就是完全按照你的建议去做,我知道这是一个查询。但我想知道这是否只有通过mongo查询才能实现;我只能读到这个问题,它提出了一种解决方法,说这很费时,并要求一种更有效的方法。所以这里有一个可能有效的方法,干杯。