{
"_id" : "TestData123",
"data" : [
{
"ch" : "test1",
"prod" : [
{
"sid" : "1",
"value" : " TV"
},
{
"sid" : "2",
"value" : "amazon",
},
{
"sid" : "3",
"value" : "ebay",
},
{
"sid" : "4",
"value" : "otherthing",
}
]
},
{
"ch" : "test2",
"prod" : [
{
"sid" : "6",
"value" : "TV",
},
{
"sid" : "7",
"value" : "amazon",
},
{
"sid" : "8",
"value" : "ebay",
},
{
"sid" : "9",
"value" : "otherthing",
}
]
}
]
}
我有以上格式的mongoDB集合。 我需要移除/清空阵列' prod'在ch:test1和ch:test2。 另外,请建议mongo查询以便将元素添加到这些中。
答案 0 :(得分:1)
我已经清理并格式化了您的BSON对象:
{
"_id":"TestData123",
"data":[
{
"ch":"test1",
"prod":[
{
"sid":"1",
"value":" TV"
},
{
"sid":"2",
"value":"amazon"
},
{
"sid":"3",
"value":"ebay"
},
{
"sid":"4",
"value":"otherthing"
}
]
},
{
"ch":"test2",
"prod":[
{
"sid":"6",
"value":"TV"
},
{
"sid":"7",
"value":"amazon"
},
{
"sid":"8",
"value":"ebay"
},
{
"sid":"9",
"value":"otherthing"
}
]
}
]
}
这是另一个具有相同问题的stackoverflow帖子:
https://stackoverflow.com/a/6327971/980423
您正在寻找$unset
运营商。
db.tmp.update({"_id":"TestData123", "data.ch": "test1"}, {$unset: {"data.$.prod": 1}});
它也很棘手,因为它在一个数组中。
db.tmp.update({"_id":"TestData123", "data.ch": "test1"}, {$set: {"data.$.prod": <some array>}});
将再次设置它。
答案 1 :(得分:0)
我不确定你使用的语言是什么,但这是我在C#中的表现方式。我会先得到带有id的文件。
var dbcollection = db.GetCollection("");
var document = dbcollection.FindOneById(ObjectId.Parse(id));
var query = new QueryDocument { { "_id", ObjectId.Parse(id) } };
然后我会用修改后的版本更新文档。
BsonArray array = new BsonArray(); //leave empty or add same structure but empty fields
UpdateBuilder update = new UpdateBuilder();
update.Set("data.0.prod", array );
var result = dbcollection.Update(query, update);
这将清空数组。我没有清空一个数组,我刚刚更新了一个,但我认为这样可行。
这也可行,我还没有测试过。
dbcollection.Remove(Query.EQ("_id", ObjectId.Parse(id)), document["data"][0]["prod"] );