如何推送列表<>到 mongodb 中的子文档?
我正在尝试将列表推送到文档的子文档。 如果我只插入一个对象作为 BsonDocument,它的工作原理如下所示:
BsonDocument subdoc = new BsonDocument {
{ "_id", ObjectId.GenerateNewId()},
{"name", "Mr Bob"}
};
var query = Query.EQ("_id", new ObjectId("1234.."));
var upd = Update.Push("members", subdoc); <-works
groups.Update(query, upd);
但我需要推送一个列表。我收到此异常:
"WriteStartArray cannot be called when State is: Initial"
这是失败的代码:
List<BsonDocument> newMembers = new List<BsonDocument>();
BsonDocument subdoc = new BsonDocument {
{ "_id", ObjectId.GenerateNewId()},
{"name", "Mr Bob"}
};
newMembers.Add(subdoc );
subdoc = new BsonDocument {
{ "_id", ObjectId.GenerateNewId()},
{"name", "Mr Tom"}
};
newMembers.Add(subdoc);
var query = Query.EQ("_id", new ObjectId(id));
var upd = Update.Push("members", newMembers.ToBsonDocument()); <- EXCEPTION
groups.Update(query, upd);
插入后,我会看到:
groups:
{
_id:1,
members:[
{
_id:1,
name: "Mr Bob"
},
{
_id:1,
name: "Mr Tom"
}
]
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于 newMembers 已经是
BsonDocument
列表,因此您无需再次将其转换为 BsonDocument。如果您想将多个文档推送到嵌套数组,您需要使用 $ PushAll:
如果您需要推送某个类的 List 项目,您需要将每个项目转换为 BsonDocument:
假设 newMembers 是 Member 类的 List,那么如果您需要将 List 推送到嵌套数组,您应该做一些事情像这样:
更新:
Since newMembers already List of
BsonDocument
you no need convert it to BsonDocument again.If you want push more than one document to the a nested array you need to use $pushAll:
In case if you will need push List items of some class you need convert each item to BsonDocument:
Lets say that newMembers is List of Member class, then if you need push List to a nested array you should do something like this:
Update:
$slice
and check uniqueness of each subdocument.