recherche

Maison  >  Questions et réponses  >  le corps du texte

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

怪我咯怪我咯2785 Il y a quelques jours405

répondre à tous(3)je répondrai

  • 怪我咯

    怪我咯2017-04-17 16:30:48

    求人不如求己么? 终于解决了 贴出来,供大家参考

    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);
                            });
                        });
                    });
                });
            });
        });
    }
    

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-17 16:30:48

    你的意思是如果用户修改了头像,需要把post里面这个用户的头像也改了

    你上面的模式感觉不适合这种场景;不如post里面中保存用户id,comments里面也保存用户的id,这样就不用一个用户的信息改了,需要在多个地方也修改相应的信息,当然这种方式需要你在比如查询comments信息的时候,需要再获取用户的信息,需要你自己取舍了

    更新的话,

    db.posts.update({userId:'xxxxxx'},{$set:{"head" : "/images/portrait-1490968786371.jpg"}})//类似这样子的

    répondre
    0
  • 阿神

    阿神2017-04-17 16:30:48

    mongodb不是关系型数据库,没办法用一条SQL语句搞定,只能用嵌套查询来做,对用惯了关系型数据库的人来说,简直无法直视。还有看到那一堆 if (err) { mongodb.close(); callback(err);}更要抓狂

    répondre
    0
  • Annulerrépondre