我在 MongoDb 中有一个文档如下
{
"_id" : ObjectId("53490030cf3b942d63cfbc7b"),
"dt" : ISODate("2014-04-12T00:00:00Z"),
"uId" : "abdc123", "count" : 12
}
Run Code Online (Sandbox Code Playgroud)
我有一个 uId 列表作为 ["abdc123","abc","cde","efg"]
我需要为每个匹配今天日期的 uId 增加计数。如果任何 uId 在今天的“dt”中没有任何值,那么更新应该为每个 UIDS 添加一个新的文档,计数为 1
我在 python 中的查询如下
client.Mydb.mycoll.update(
{
"uId":{"$in":["abdc123","abc","cde","efg"]},
"dt":datetime(y,m,d)
},
{"$inc":{"count":1}},
upsert=True,
multi=True
)
Run Code Online (Sandbox Code Playgroud)
但输出不符合预期,它只创建了一个计数为 1 的文档
在 pymongo 中建议我正确的查询
更新:为了增加已经存在的值,上面的代码有效,但如果“uId”和“dt”不在集合中,则不会创建新文档
小智 5
要进行上述记录更新,您需要使用 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()
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助。
| 归档时间: |
|
| 查看次数: |
1533 次 |
| 最近记录: |