我想使用带有pymongo的光标从集合中删除文档。但我有_id归档嵌入式,我必须通过整个_id字段删除标准。
{
"_id" : {
"Path" : 0,
"TriggerName" : "KM_Topzones_In App",
"userId" : NumberLong(3408661),
"Date" : "01/09/2017",
"OfferType" : "NOOFFER"
},
"OfferCount" : NumberLong(0),
"OfferName" : "NoOffer",
"desktopTop-normal" : NumberLong(1),
"mrcTop-normal" : NumberLong(1),
"appPostLoginOverlay-normal" : NumberLong(1)
}
删除查询:
>>> cursor=col.find()
>>> slice=cursor[0:5]
>>> for doc in slice:
... print doc['_id']
... result=col.delete_one({"_id": doc['_id']})
... result.deleted_count
...
{u'Date': u'01/09/2017', u'Path': 0, u'OfferType': u'NOOFFER', u'userId': 3408661L, u'TriggerName': u'KM_Topzones_In App'}
0
{u'Date': u'01/09/2017', u'Path': 0, u'OfferType': u'NOOFFER', u'userId': 1587308L, u'TriggerName': u'KM_Topzones_In App'}
0
{u'Date': u'01/09/2017', u'Path': 0, u'OfferType': u'NOOFFER', u'userId': 1049384L, u'TriggerName': u'KM_Topzones_In App'}
0
{u'Date': u'01/09/2017', u'Path': 0, u'OfferType': u'NOOFFER', u'userId': 3029181L, u'TriggerName': u'KM_Topzones_In App'}
0
{u'Date': u'01/09/2017', u'Path': 0, u'OfferType': u'NOOFFER', u'userId': 2884382L, u'TriggerName': u'KM_Topzones_In App'}
0
但这不是删除任何东西,有办法吗?
请建议。
答案 0 :(得分:1)
要实现此目的,您需要使用"点符号"因为field's order matter here.
db.collection.deleteOne({
"_id.Path": 0,
"_id.TriggerName" : "KM_Topzones_In App",
"_id.userId" : NumberLong(3408661),
"_id.Date" : "01/09/2017",
"_id.OfferType" : "NOOFFER"
})
在您的情况下,您可以使用如下字典理解构建查询过滤器:
query = {"_id.{key}".format(key=key): value for key, value in doc['_id'].items()}
然后将query
传递给.delete_one()
result = col.delete_one(query)