【问题标题】:how to get the return value of findAndModify func in MongoDB with mongoose?如何使用mongoose在MongoDB中获取findAndModify func的返回值?
【发布时间】:2012-04-04 03:29:56
【问题描述】:

我正在像这样使用 Node.js+mongoose+MongoDB:

SomeModelSchema.statics.findAndModify = function (query, sort, doc, options, callback) {
    return this.collection.findAndModify(query, sort, doc, options, callback);
};

SomeModel.findAndModify({}, [], { $inc: { amount: 1 } }, {}, function (err) {
    if (err) throw err;
});

我可以成功增加amount,但我想获得amount 的新值,而无需再次进行查询。有什么办法吗?

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    options 对象中指定{new:true}。这将使findAndModify的结果值成为应用更新后的文档,然后您可以从中读取以获取amount的新值。

    详情在此,在表格中:http://www.mongodb.org/display/DOCS/findAndModify+Command

    我相信您的回调将需要两个参数,例如: function(err, result){

    当回调被触发时,result 应该包含新文档(如果err 为空)。

    【讨论】:

      【解决方案2】:

      我检查了和尚的源代码,终于让它工作了。连code documentation都说了应该怎么做,但是在和尚的网上documentation看不到。

      /**
       * findAndModify
       *
       * @param {Object} search query, or { query, update } object
       * @param {Object} optional, update object
       * @param {Object|String|Array} optional, options or fields
       * @param {Function} callback
       * @return {Promise}
       * @api public
       */
      

      这意味着您可以指定 queryupdate 作为单独的参数,加上 options 作为第三个参数:

      notescollection.findAndModify(
        { "_id": id },
        { "$set": { 
            "title": title,
            "content": content
        }},
        { "new": true, "upsert": true },
        function(err,doc) {
          if (err) throw err;
          console.log( doc );
        }
      );
      

      或者你可以指定 queryupdate 作为第一个参数的字段,加上 options 作为第二个参数:

      notescollection.findAndModify(
        {
          "query": { "_id": id },
          "update": { "$set": { 
              "title": title,
              "content": content
          }}
        },
        { "new": true, "upsert": true },
        function(err,doc) {
          if (err) throw err;
          console.log( doc );
        }
      );
      

      有关来源的更多信息,请查看 collections.js 文件中的 findAndModify 函数。

      【讨论】:

        猜你喜欢
        • 2017-01-10
        • 2015-11-18
        • 1970-01-01
        • 2021-12-23
        • 2011-11-12
        • 2019-09-12
        • 2018-10-26
        • 2016-09-13
        • 2011-11-20
        相关资源
        最近更新 更多