【问题标题】:Mongodb 3.2 Node js $push is not workingMongodb 3.2 Node js $push 不工作
【发布时间】:2017-02-07 11:27:16
【问题描述】:

我想将新朋友 JSON 对象推送到数组:朋友 我已经通过 mongodb 直接尝试 $push 但它不适用于 NodeJS 有谁知道wan 出了问题?

我尝试了 UsersInfo.friend -> 朋友 UsersInfo.friend.user_id -> user_id

并且没有错误返回。

播放器结构:

socket.on('follow_friend',function(data){
    var me = current_players_socket.indexOf(socket);
    console.log("PLayer id:"+data.user_id+" Player name:"+current_players[me].name+ "'s friend following request received");
    console.log("Target:"+data.fdid);
    MongoClient.connect(url,function(err,db){
        assert.equal(null,err);
        follow_friend_to_db(data,db,function(){
            db.close();
        });
    });
});

var follow_friend_to_db = function(data,db,callback){
    var me = current_players_socket.indexOf(socket);
    console.log("Following "+data.fdid+" to "+data.user_id);
            current_players[me].friend.push(data.fdid);
    db.collection('Users').update(
        {"UsersInfo.user_id":data.user_id},
        {
            $push: {
                "UsersInfo.friend" : 
                {$each:
                    {
                        "UsersInfo.friend.user_id" : data.fdid,
                        "UsersInfo.friend.add_date" : new Date("2014-10-01T00:00:00Z")
                    }
                }
            }
        },function(err,results){
            for(i= 0;i<current_players[me].friend.length;i++){
                console.log(current_players[me].friend[i]);
            }
            socket.emit('friend_followed',{fdid:data.fdid});
            callback();
        });
};

这里是 $set 函数,它是有效的

    socket.on('gold_add',function(data){
    console.log("Player id:"+data.user_id+" add gold request recevied");
    var i = current_players_socket.indexOf(socket);

    MongoClient.connect(url,function(err,db){
        assert.equal(null,err);
        update_user_gold_to_db(data,db,function(){
            db.close();
        });
    });
    console.log("Player:"+current_players[i].get_name()+"'s gold:"+current_players[i].gold);

});

var update_user_gold_to_db = function(data,db,callback){
    var i = current_players_socket.indexOf(socket);
    console.log("Player id:"+data.user_id+" add gold amount:"+data.amount);
    var t = data.amount + current_players[i].get_gold();
    console.log(t);
    db.collection('Users').update(
        {"UsersInfo.user_id":data.user_id},
        {
            $set:{"UsersInfo.gold":t}
        }, function(err,results){
            //console.log(results);
            current_players[i].gold+=data.amount;
            socket.emit('gold_add_success',{gold:current_players[i].gold});
            callback();
        });
};

【问题讨论】:

    标签: javascript node.js mongodb


    【解决方案1】:

    为什么要使用 $each。当我们有一个数组来推送时,我们使用 $each ,就像 mongodb 文档中提到的那样:

    db.inventory.update(
       { _id: 2 },
       { $addToSet: { tags: { $each: [ "camera", "electronics", "accessories" ] } } }
     )
    

    尝试删除 $each:

    var follow_friend_to_db = function(data,db,callback){
        var me = current_players_socket.indexOf(socket);
        console.log("Following "+data.fdid+" to "+data.user_id);
                current_players[me].friend.push(data.fdid);
        db.collection('Users').update(
            {"UsersInfo.user_id":data.user_id},
            {
                $push: {
                    "UsersInfo.friend" : 
                        {
                            "user_id" : data.fdid,
                            "add_date" : new Date("2014-10-01T00:00:00Z")
                        }
                }
            },function(err,results){
                for(i= 0;i<current_players[me].friend.length;i++){
                    console.log(current_players[me].friend[i]);
                }
                socket.emit('friend_followed',{fdid:data.fdid});
                callback();
            });
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-10
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 2019-08-24
      • 2020-05-12
      相关资源
      最近更新 更多