如何对用mongoose对内嵌文档进行类似upsert的操作呢?
发布于 11 年前 作者 zhiyishou 6736 次浏览 最后一次编辑是 8 年前
Schema = {
  uid:{type:ObjectId},
  reply:[]
}

我想在reply里push每一个人的对话集合

reply:[
  {
    user_id:123,
    commnet:[]
  },
  {
    user_id:456,
    comment:[]
  }
]

如果我想在user_id:789的comment里面push一条对话内容

{
  user_id:789,
  comment:[
    {
     //内容
    }
  ]
}

得先判断user_id:789的对话集合是否存在,如果不存在,创建它 find()该文档后用遍历可以实现,但是太耗时

var exists = false;
var index;
for(var i in reply){//reply为find()后返回的doc.reply
  if(reply[i].user_id == '789'){
    exists = true;
    index = i;
    return;
  }
}
if(exists){//如果存在
  reply[i].comment.push({//内容})
}else{//如果不存在
  reply.push({
    user_id:789,
    comment:[
      {
       //内容
      }
    ]
  })
}

很明显,这样做太耗时,而且繁杂,有没有更简便的方法实现上面的东西呢?

4 回复

http://cnodejs.org/topic/50a60955637ffa4155faf861 我本来一直都是像我那样遍历的,我昨天晚上看你的帖子,看到省时多了,立马就想把自己的前面写的都改了,但是一直没弄好,aggregate只能获取数据,不能对数据进行操作保存啊

求指点呐

眼看小弟的网站就要上线了,这点问题还没解决,求大神们指导啊

回到顶部