【问题标题】:How to write automic operation in mongoDB integrated with python如何在mongoDB与python的集成中编写原子操作
【发布时间】:2015-12-20 17:58:27
【问题描述】:

我创建了收款费用详情。

{
    "_id": "fee_details",
    "name": "Tution fees",
    "student_total": 30,
    "fee_notpaid": 29,
    "fee_paid_by": [{
    "stu_name": "jaya",
    "date": "10-09-2014"
    }]
}

我尝试使用以下查询输入fee_paid_by 详细信息:

 db.fee_details.findAndModify({
    query: {
    "_id": "fee_details",
    "fee_notpaid": {
        $gt: 0
    }
    },
    update: {
    $inc: {
        "fee_notpaid": -1
    },
    $push: {
        "fee_paid_by": {
            "stu_name": "jaya",
            "date": "10-09-2014"
        }
    }
    }
})

它在命令行上执行并将fee_paid_by 详细信息添加到fee_details 集合中。但我尝试在下面执行与 python 的查询集成

c = db.fee_details.find_and_modify({
    '$query': {
    "_id": "fee_details",
    "fee_notpaid": {
        '$gt': 0
    }
    },
    '$update': {
    '$inc': {
        "fee_notpaid": -1
    },
    '$push': {
        "fee_paid_by": {
            "stu_name": s_name,
            "fee": fee
        }
    }
    }
})

执行上面的代码时会报错either must remove or update

fee_paid_by详细信息输入fee_details集合的正确方法是什么??

提前致谢。

【问题讨论】:

    标签: mongodb python-2.7 python-3.x pymongo


    【解决方案1】:

    .find_and_modify 接受关键字参数,并且键名不应以 $ 符号开头。

    >>> import pymongo
    >>> client = pymongo.MongoClient()
    >>> db = client.test
    >>> col = db.collection
    >>> name = 'jaya'
    >>> fee = 11
    >>> query = {'_id': 'free_details', 'free_notpaid': {'$gt':0}}
    >>> update = {'$inc': {'free_notpaid': -1}, '$push': {'free_paid_by': {'stu_name': name, 'fee': fee}}}
    >>> col.find_and_modify(query=query, update=update)
    

    find_and_modify 方法已弃用,因为 pymongo 3.0 你应该改用find_one_and_delete()find_one_and_replace()find_one_and_update()

    >>> col.find_one_and_update(filter=query, update=update)
    

    【讨论】:

      猜你喜欢
      • 2017-12-19
      • 1970-01-01
      • 2018-12-08
      • 2017-11-19
      • 2013-05-07
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      相关资源
      最近更新 更多