node.js - 如何对mongodb两个集合和集合内嵌套数组对象进行update更改?

查看:138
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆