MongoDB-Mongoose,在嵌套查询中添加新文档数据

时间:2018-07-31 19:57:37

标签: node.js mongodb mongoose

我无法在嵌套查询中推送数据

我无法理解我的代码中遗漏了什么(我是mongodb的新手,只是尝试一下)

我的目标是在帖子中添加“帖子”

const Schema = mongoose.Schema;
const UserDetail = new Schema({
    username: String,
    password: String,
    firstname: String,
    lastname: String,
    email: String,
    posts: {
        post:{
            title: String,
            article: String,
            comments: {}
        }
    }
});
const User = mongoose.model('userInfo', UserDetail, 'userInfo');

module.exports = User;

这是我的更新代码

User.findOneAndUpdate({_id: req.user._id},{ $push: {"posts": { "post" : { "article": req.body.description }} }     });

提前谢谢

1 个答案:

答案 0 :(得分:1)

$push 用于将指定的值附加到数组。如果文档中不存在要更新的字段,它将以该值作为元素添加数组字段,但是如果该字段不是数组,则该操作将失败。在您的情况下,posts是嵌入式文档,而不是数组。

您可以更新架构以将posts设置为以下数组:

const Schema = mongoose.Schema;
const UserDetail = new Schema({
    username: String,
    password: String,
    firstname: String,
    lastname: String,
    email: String,
    posts: [
        {
            title: String,
            article: String,
            comments: []
        }
    ]
})

然后进行推送

User.findByIdAndUpdate(req.user,
   { "$push": { 
       "posts": { 
           "article": req.body.description  
       } 
   } }  
);

,或者如果使用现有架构,则将{strong> $setdot notation一起使用。使用 $set 的操作遵循以下示例:

User.findByIdAndUpdate(req.user,
   { "set": { "posts.post.article": req.body.description  } } 
);