如何对用mongoose对内嵌文档进行类似upsert的操作呢? - CNode技术社区

如何对用mongoose对内嵌文档进行类似upsert的操作呢?
发布于 12 年前 作者 zhiyishou 7104 次浏览 最后一次编辑是 9 年前
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只能获取数据,不能对数据进行操作保存啊

求指点呐

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

回到顶部

AltStyle によって変換されたページ (->オリジナル) /