如果没有找到,就会记录一个猫鼬记录

时间:2015-08-04 05:04:31

标签: mongodb mongoose mongodb-query

mongoose架构如下:

var followSchema = new Schema({
  userId: {type: String, required: true},
  following : []
});

目标是使用ID字段查找用户,然后将项目添加到以下数组中。

以下方法不起作用:

var myRecord = FollowModel.findOneAndUpdate({userId: req.user.Id}, {upsert: true});
    myRecord.exec(function(err, result) {

        result.following.push('Test');
        res.status(200).send('New Item Added to Follow List');

    });

这是怎么做到的?

1 个答案:

答案 0 :(得分:1)

它确实有效,您只是忘记包含{ "new": true }选项,以及有效的更新语句:

FollowModel.findOneAndUpdate(
   { "userId": req.user.Id}, 
   { "$setOnInsert": {

   }},
   { "upsert": true, "new": true },
   function(err,result) {
       if (err) throw err;
       console.log(result);
   }

);

空白$setOnInsert在这种情况下不会有任何结果,但是否则你会在那里放置一些你想要“插入”的东西。这将与语句的“查询”部分中的任何字段一起应用。

其他标准update operators也可以适用,但通常在您想要更新的“匹配”内容的情况下。

但是这里的{ "new": true }让命令知道返回“修改或创建”的文档,而不是“原始或不存在”文档,这是没有该选项的默认文档。