我在MongoDB中有如下文档

{
   "_id" : ObjectId("53490030cf3b942d63cfbc7b"),
   "dt" : ISODate("2014-04-12T00:00:00Z"),
   "uId" : "abdc123", "count" : 12
 }

我有一个uid列表["abdc123","abc","cde","efg"]
我需要为与今天日期匹配的每个uid增加一个计数。如果任何uid在今天的“dt”中没有值,那么update应该为计数为1的每个uid添加一个新文档
我在python中的查询如下
client.Mydb.mycoll.update(
    {
       "uId":{"$in":["abdc123","abc","cde","efg"]},
       "dt":datetime(y,m,d)
    },
    {"$inc":{"count":1}},
    upsert=True,
    multi=True
)

但输出与预期不同,它只创建一个计数为1的文档
建议我使用pymongo中的正确查询
更新:为了增加已经存在的值,上面的代码可以工作,但是如果“uid”和“dt”不在集合中,则不会创建新文档

最佳答案

如前所述,要执行记录更新,您需要使用pymongo.bulk.bulkupsertation,如下所示

from pymongo.bulk import BulkUpsertOperation
bulk=clientConn.db.table.initialize_ordered_bulk_op()

for i in someList:
    bulk.find({'uid':i,"dt":datetime(y,m,d)}).upsert().update({'$inc': {'count': 1}})
res=bulk.execute()

希望这会有帮助。

09-25 19:39