mongoDB:添加和更新(嵌套)对象中的某些字段

时间:2016-01-25 02:41:11

标签: javascript mongodb

这是一个mongoDB文档,我需要添加一些数据:

{
    "_id" : "7KufvMQFyyeuKFP68",
    "target" : {
        "10" : "true",
        "id" : "ePce6fBAHx9KeKjuM"
    }
}

我需要更新target中的现有字段,或者添加它们(如果它们不存在)。这就是我试过的:

var result = { "30": "true", "id" : "ePce6fBAHx9KeKjuM" };

Collection.upsert(
    { _id: id }, 
    { $set: { target: result } }
);

但是这个1030取代,但我期待这个结果:

{
    "_id" : "7KufvMQFyyeuKFP68",
    "target" : [{
        "10" : "true",
        "30" : "true",
        "id" : "ePce6fBAHx9KeKjuM"
    }]
}

1 个答案:

答案 0 :(得分:0)

您似乎想要更新对象数组。该数组是您的target字段,因此请确保该类型是架构中的数组。要更新阵列,请按您选择的ID或字段选择阵列。

此代码查找字段并添加"30" : "true",并将其他信息保留在数组内的对象中。希望它有所帮助。

var userSchema = new mongoose.Schema({
    name: String,
    target : []
})
var User = mongoose.model("User", userSchema);
//creat a documenent 

var user1 = new User({
    name : "jack",
    target :[{
        "10" : "true",
        "id" : "ePce6fBAHx9KeKjuM"
    }]
})
user1.save(user1, function(err, user){
    console.log(user)
})
User.findOneAndUpdate(
    {"name" : "jack"},
    {safe : true, upsert : true, new :true},
    function(err, model){
        model.target[0]["30"] = "true"
        console.log(model.target)
    }
)