使用Nodejs在MongoDB中查询SuDocuments

时间:2016-11-21 13:32:10

标签: node.js mongodb mongoose

我想使用节点js在mongoDB中的子文档中添加一个值。 架构是:

contacts[contacts.length] = add1;

我希望一个用户将评论添加到其他用户的图片。 我现在使用的方法是:

    var commentSchema = new Schema({
    author:String,
    data:String,
    postedAt:Date
});

var likeSchema = new Schema({
    likedBy:{
        type:Array,
        default:[""]
    },
    numOfLikes:{
        type:Number,
        default:0
    }
});

var picSchema = new Schema({
    url:String,
    likes:[likeSchema],
    comments:[commentSchema]
});

var statusSchema = new Schema({
    data:String,
    likes:[likeSchema], 
    comments:[commentSchema]
});

var profileSchema = new Schema({
    username:String,
    password:String,
    DOB :Date,
    sex: String,
    Address:String,
    pic:[picSchema],
    Status:[statusSchema]
});

这里我得到的错误是:不能使用pic.comments的部分图片来遍历。

当我使用update语句时:

profile.update({"username":recepient,"pic._id":id},{$set:{"pic.comments":{"author":user,"data":comment,"postedAt":new Date()}}}},function(err,data){
                    if (err){
                        throw err;
                    }else{
                        console.log(data);
                        res.status(200).json({status:"Added successfully"});
                    }

我没有收到任何错误,但是没有添加该值。

更新语句或架构是否有错误?

1 个答案:

答案 0 :(得分:0)

个人资料 [Pic] Pic [评论] ,如果您想要"pic._id":id更新 图片 ,那么您应该查询Pic模型,而不是配置文件。 SubDocuments有点像sql表

pic.update({ // update Pic model, not Profile
    "pic._id": id // removed "username":recepient as you already have picId
  }, {
    $set: {
      "comments": {
        "author": user,
        "data":comment,
        "postedAt":new Date()
      }
    }
  }, function(err,data){
       if (err){
         throw err;
       console.log(data);
       res.status(200).json({status:"Added successfully"});
  }