我在使用官方的MongoDB c#驱动程序删除数组中的文档时遇到了问题.我想要做的也是返回被删除的文档.
我的班级是这样的:
public class Holder
{
public string Owner { get; set; }
public List<Card> Cards { get; set; }
}
public class Card
{
public string Id { get; set; }
public string Name { get; set; }
public string Placement { get; set; }
}
以下是该文件的一个exerpt:
{
"owner": "656dd33e0300"
"cards" : [
{
"id": "s39CNzu4Na3",
"name" : "Department",
"placement" : "8a"
},
...
]
}
我的第一个 idea 就是拿到卡片,然后用以下命令删除它:
var filter = Builders<Card>.Filter.Eq(x => x.Id, cardId);
var res = await collection.DeleteOneAsync(
Builders<Holder>.Filter.Eq(e => e.Owner, owner) &
Builders<Holder>.Filter.ElemMatch(e => e.Cards, filter)
);
try {
return res.DeletedCount > 0;
}
catch (Exception ex) {
throw;
}
但这最终只是删除了列表中的所有卡片.
我一直在试着用FindOneAndDeleteAsync
,但就是不能用.
Update 首先,非常感谢@markus和@yongshun,因为他们的答案都对我有用,我 Select @markus作为答案,因为它是第一个有效的答案,我喜欢更短的代码,与我的其他代码类似.