我是Mongodb世界的新手,现在我正在努力如何删除,更新文档的嵌套数组字段中的元素.这是我的samle文件:
{
"_id" : ObjectId("55f354533dd61e5004ca5208"),
"Name" : "Hand made products for real!",
"Description" : "Products all made by hand",
"Products" : [
{
"Identifier" : "170220151653",
"Price" : 20.5,
"Name" : "Leather bracelet",
"Description" : "The bracelet was made by hand",
"ImageUrl" : "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQii6JCvXtx0iJGWgpvSl-KrdZONKYzDwS0U8uDvUunjO6BO9Aj"
}
]
}
Run Code Online (Sandbox Code Playgroud)
在我的方法中,我得到了文档的id和我想删除的Product的id(Identifier).任何人都可以告诉我如何从Products字段中删除具有Identifier的元素:170220151653?
我试过了:
var query = Query.And(Query.EQ("_id", categoryId), Query.EQ("Products.Identifier", productId));
var update = Update.Pull("Products", new BsonDocument(){{ "Identifier", productId }});
myDb.Applications().Update(query, update);
Run Code Online (Sandbox Code Playgroud)
如下所示:MongoDB从子文档中删除子文档文档
但我得到一个错误
myDb.Applications()
它无法找到.
解决了:
var pull = Update<Category>.Pull(x => x.Products, builder => builder.EQ(q => q.Identifier, productId));
collection.Update(Query.And(Query.EQ("_id", ObjectId.Parse(categoryId)), Query.EQ("Products.Identifier", productId)), pull);
Run Code Online (Sandbox Code Playgroud)
nel*_*eus 12
你正在调用方法Pull(string name, MongoDB.Bson.BsonValue value)并根据文档调用它
从命名数组元素中删除所有等于某个值的值(请参阅$ pull)
并且您提供{ "Identifier", productId }了价值.我猜mongo没有找到确切的值.
尝试使用Pull查询条件的第二个重载而不是精确值
从命名数组元素中删除与某个查询匹配的所有值(请参阅$ pull).
var update = Update.Pull("Products", Query.EQ("Identifier", productId));
Run Code Online (Sandbox Code Playgroud)
UPDATE
因为你提到Category实体所以我可以建议使用lambda而不是
Query.EQ:
var pull = Update<Category>.Pull(x => x.Products, builder =>
builder.Where(q => q.Identifier == productId));
Run Code Online (Sandbox Code Playgroud)
使用 C# MongoDB 驱动程序的解决方案。删除单个嵌套元素。
var filter = Builders<YourModel>.Filter.Where(ym => ym.Id == ymId);
var update = Builders<YourModel>.Update.PullFilter(ym => ym.NestedItems, Builders<NestedModel>.Filter.Where(nm => nm.Id == nestedItemId));
_repository.Update(filter, update);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8986 次 |
| 最近记录: |