0

我到处寻找,无法弄清楚。我们如何为 MongoDB/Mongoose 中的更新子文档返回自动生成的 _id?

这是我的架构:

var commentsSchema = new mongoose.Schema({
  sid : { type : mongoose.Schema.ObjectId }, // (story who these comments belong to)
  seq : Number, // bucket #
  cmts : [ {
    tx:String,
    un : String, //username
    u:{ type : mongoose.Schema.ObjectId }, //user id
    t:Date
  } ]
});

这是我的查询:

self.model('Comments').update({
        "sid" : sid,
        "seq" : seq
      }, {
        '$addToSet' : {
          "cmts" : {
            "tx":text,
            "u" : uid,
            "un" : uname,
            "t":new Date(),
          }
        }
      },
      {
        "upsert" : true
      }, function(err, comment) {
        if (err)
          return cb(err);
        console.log("le comments:"+JSON.stringify(comment));
        cb(err, comment);
      });

非常感谢任何帮助,谢谢!亨利

4

1 回答 1

0

Mongoose 的update函数只会返回errnumAffected在它的回调中,因此您此时无法知道 _id。最简单的做法就是在更新完成时查询它。

var query = {
    sid: sid,
    seq: seq
};
var data = {
    $addToSet : {
        cmts : {
            tx: text,
            u: uid,
            un: uname,
            t: new Date(),
        }
    }
};
var options = {
    upsert: true,
};

Comments.update(query, data, options, function(err, numAffected) {
    if (err)  ...
    Comments.findOne(query, function(err, comment) {
        if (err) ...
        console.log(comment._id);
        ...
    })
});

要知道您的评论是否被插入或更新,您可以随时findOne在更新之前进行查询以查看它是否存在。

于 2014-09-14T08:36:13.303 回答