我使用MongoDB C#驱动程序,我想知道如何使用更新查询清除MongoDB中的嵌套数组。
这是我的集合,其中包含以下"架构":
之后的一些文档{
"_id": { "$oid": "543cd94799c3ff7a2850a1b6" },
"Type": 1,
"Information": [
{
"Type" : 2,
"Colors": [],
"Heights": [],
"Widths": []
}
]
}
我想要的是清除(删除所有元素)颜色,高度和宽度嵌套数组。
我尝试过类似的事情:
var query = Query.And(Query.Exists(Entity.INFORMATION + "." + Information.COLORS),
Query.Exists(Entity.INFORMATION + "." + Information.HEIGHTS),
Query.Exists(Entity.INFORMATION + "." + Information.WIDTHS),
Query.EQ(Entity.TYPE, typeId),
Query.ElemMatch(Entity.INFORMATION, Query.EQ(Information.TYPE, informationTypeId)));
var update = MongoDB.Driver.Builders.Update.Set(Entity.INFORMATION + ".$." + Information.WIDTHS, new BsonArray(new Width[0]))
.Set(Entity.INFORMATION + ".$." + Information.COLORS, new BsonArray(new Color[0]))
.Set(Entity.INFORMATION + ".$." + Information.HEIGHTS, new BsonArray(new Height[0]))
.Set(Entity.INFORMATION + ".$." + Information.TYPE, BsonNull.Value);
Collection.Update(query, update, UpdateFlags.Multi);
但似乎没有用。
请帮忙。
我已尝试过以下原生查询,但似乎无效:
db.myCollection.update(
{
"Information.Colors": {
$exists: true
},
"Type": 1
},
{
$set: {
"Information.$.Colors": [],
"Information.$.Widths": [],
"Information.$.Heights": [],
"Information.$.Type" : null
}
},
false, true)
它仅适用于集合中的第一个文档。
其余的不受影响...... :(
答案 0 :(得分:1)
$对于嵌套数组是必需的,并且查找具有访问更新字段的查询也是必要的
var update = Update
.Set("Information.$.Heights", new BsonArray(new int[0]))
.Set("Information.$.Colors", new BsonArray(new int[0]))
.Set("Information.$.Widths", new BsonArray(new int[0]));
var q = Query.Exists("Information.Heights"); // important
c.Update(q, update, UpdateFlags.Multi);
答案 1 :(得分:0)
无法使用位置运算符更新数组中的所有文档。