MongoDb pymongo如何增加多个文件

时间:2014-04-14 07:58:25

标签: python mongodb

我在MongoDb中有一个文件如下

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

我有一个uIds列表["abdc123","abc","cde","efg"]

我需要为每个匹配今天的日期增加一个计数。如果任何uId在今天的“dt”中没有任何价值,那么更新应该为每个计数1的UIDS添加一个新的文档

我在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”不在集合中,则不会创建新文档

2 个答案:

答案 0 :(得分:3)

如上所述进行记录更新,您需要使用pymongo.bulk.BulkUpsertOperation,如下所示

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()
希望这会有所帮助。

答案 1 :(得分:0)

我认为你必须做类似下面的工作才能使它发挥作用..

["abdc123","abc","cde","efg"] { ///lopp all of them
  client.Mydb.mycoll.update({
    "uId": <loop-variable>, // for each value .. eg. "abc123" ... 
    "dt":datetime(y,m,d)},{"$inc":{"count":1}
    },
    upsert=True,
    multi=True
   )
}