【问题标题】:Mongoengine raw find_and_modify query gives "Must either update or remove" exceptionMongoengine 原始 find_and_modify 查询给出“必须更新或删除”异常
【发布时间】:2016-01-08 07:35:23
【问题描述】:

我正在使用 Django + mongoengine 我想更新 Bookscollection 文档中的书籍(嵌入式文档)计数。我希望更新查询返回完整的对象。因此我正在使用“find_and_modify”。但即使我使用更新或删除字段。我仍然收到“必须更新或删除”的错误。 这是我的代码 sn-p -

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
        })

这里有什么问题?

【问题讨论】:

    标签: django mongodb pymongo mongoengine


    【解决方案1】:

    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 中已弃用,如果您的潜水员是 pymongo 2.9 或更新的,您应该使用 find_one_and_update

    【讨论】:

      【解决方案2】:
      BookCollection._get_collection().find_and_modify(
                          query={'coll_id':book_coll_id,'book.book_id': book_id},
                          update={'$inc': {'book.$.quantity' : 1}},
                          new=True
                  )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-30
        • 2014-01-21
        • 2020-05-09
        • 2021-02-19
        相关资源
        最近更新 更多