node.js - 如何对mongodb两个集合和集合内嵌套数组对象进行update更改?
本文介绍了node.js - 如何对mongodb两个集合和集合内嵌套数组对象进行update更改?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
背景:在nodejs中使用node-mongodb-native驱动mongodb
在一个数据库中有两个集合users和posts
想对着两个集合中的所有head进行更改如何操作?
具体结构如下:
集合user:
{
"_id" : ObjectId("58dcfb988f27d92bdcc49b90"),
"name" : "Ccccc",
"password" : "77f8a51b57ab51b6c7c8104f1699544b",
"head" : "/images/portrait-1491031350505.jpg"
}
集合posts:
{
"_id" : ObjectId("58dcfe048f27d92bdcc49b93"),
"name" : "Cccccc",
"head" : "/images/portrait-1490968786371.jpg",
"time" : "2017-3-30 20:45:56"
"title" : "发文章",
"post" : "这是正文部分",
"comments" : [
{
"name" : "Capricorn",
"head" : "/images/portrait-1490877344697.jpg",
"time" : "2017-3-30 20:46:6"
"comment" : "发表一下评论 么么哒",
},
{
"name" : "Capricorn",
"head" : "/images/portrait-1490877344697.jpg",
"time" : "2017-3-30 20:47:16"
"comment" : "头像?",
},
],
}
对users集合中的head对象、posts集合中的head对象以及comments数组中的head对象进行更改,该如何实现?
我现在是个新手 遇到这个问题已经两天了,不知从何下手
解决方案
求人不如求己么? 终于解决了 贴出来,供大家参考
mongodb.open(function(err, db) {
if (err) {
return callback(err);
}
db.collection('users', function (err, collection) {
if (err) {
mongodb.close();
callback(err);
}
db.collection('posts', function (err, collectionofposts) {
if (err) {
mongodb.close();
callback(err);
}
collection.update({"name": name}, {$set: {"head": head}}, function(err) {
if (err) {
return callback(err);
}
collectionofposts.update({"name": name}, {$set: {"head": head}}, {multi: true}, function(err) {
if(err) {
return callback(err);
}
collectionofposts.find().forEach( function(doc) {
collectionofposts.update({_id: doc._id, "comments.name": name},
{$set: {"comments.$.head": head}}, {multi: true});
}, function(err) {
if(err) {
return callback(err);
}
mongodb.close();
callback(null);
});
});
});
});
});
});
}
这篇关于node.js - 如何对mongodb两个集合和集合内嵌套数组对象进行update更改?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文