Mongoengine 原始 find_and_modify 查询给出 "Must either update or remove" 异常
Mongoengine raw find_and_modify query gives "Must either update or remove" exception
我正在使用 Django + mongoengine
我想更新我的 Bookscollection 文档中的书籍(嵌入式文档)计数。我想要 return 完整对象的更新查询。因此我使用的是 'find_and_modify'。但即使我使用更新或删除字段。我仍然收到 'Must either update or remove' 的错误。
这是我的代码片段 -
for book_id in book_list:
book_col = BookCollection._get_collection().find_and_modify({
'query': {'coll_id':book_coll_id,'book.book_id':book_id},
'update':{'$inc':
{'book.$.quantity' : 1}
},
'new':True
})
这里有什么问题?
find_and_modify
采用关键字参数,这就是您收到该错误消息的原因。
for book_id in book_list:
book_col = BookCollection._get_collection().find_and_modify({
query={'coll_id':book_coll_id,'book.book_id': book_id},
update={'$inc': {'book.$.quantity' : 1}},
new=True
})
您还应该知道 find_and_modify
在 pymongo3.0 中已弃用,您应该使用 find_one_and_update
if your diver is pymongo 2.9 或更新版本。
BookCollection._get_collection().find_and_modify(
query={'coll_id':book_coll_id,'book.book_id': book_id},
update={'$inc': {'book.$.quantity' : 1}},
new=True
)
对于在 pymongo 3.0 之后来到这里的任何人,您需要使用 .find_one_and_update
而不是 find_and_modify
,因为它已被弃用。
示例:
book_col = BookCollection._get_collection().find_one_and_update(
filter={'coll_id':book_coll_id,'book.book_id': book_id},
update={'$inc': {'book.$.quantity' : 1}},
new=True
)
我正在使用 Django + mongoengine 我想更新我的 Bookscollection 文档中的书籍(嵌入式文档)计数。我想要 return 完整对象的更新查询。因此我使用的是 'find_and_modify'。但即使我使用更新或删除字段。我仍然收到 'Must either update or remove' 的错误。 这是我的代码片段 -
for book_id in book_list:
book_col = BookCollection._get_collection().find_and_modify({
'query': {'coll_id':book_coll_id,'book.book_id':book_id},
'update':{'$inc':
{'book.$.quantity' : 1}
},
'new':True
})
这里有什么问题?
find_and_modify
采用关键字参数,这就是您收到该错误消息的原因。
for book_id in book_list:
book_col = BookCollection._get_collection().find_and_modify({
query={'coll_id':book_coll_id,'book.book_id': book_id},
update={'$inc': {'book.$.quantity' : 1}},
new=True
})
您还应该知道 find_and_modify
在 pymongo3.0 中已弃用,您应该使用 find_one_and_update
if your diver is pymongo 2.9 或更新版本。
BookCollection._get_collection().find_and_modify(
query={'coll_id':book_coll_id,'book.book_id': book_id},
update={'$inc': {'book.$.quantity' : 1}},
new=True
)
对于在 pymongo 3.0 之后来到这里的任何人,您需要使用 .find_one_and_update
而不是 find_and_modify
,因为它已被弃用。
示例:
book_col = BookCollection._get_collection().find_one_and_update(
filter={'coll_id':book_coll_id,'book.book_id': book_id},
update={'$inc': {'book.$.quantity' : 1}},
new=True
)