用python查找mongo中缺失文档的有效方法
我遇到了一段代码,这是一个旨在查找mongo DB中缺失值的函数,代码如下:用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
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查询才能实现;我只能读到这个问题,它提出了一种解决方法,说这很费时,并要求一种更有效的方法。所以这里有一个可能有效的方法,干杯。