.net 如何推送列表<&燃气轮机;到mongodb中的子文档?
我正在尝试将列表推送到文档的子文档。 如果我只插入一个对象作为BsonDocument,它的工作原理如下所示:.net 如何推送列表<&燃气轮机;到mongodb中的子文档?,.net,c#-4.0,mongodb,mongodb-.net-driver,.net,C# 4.0,Mongodb,Mongodb .net Driver,我正在尝试将列表推送到文档的子文档。 如果我只插入一个对象作为BsonDocument,它的工作原理如下所示: BsonDocument subdoc = new BsonDocument { { "_id", ObjectId.GenerateNewId()}, {"name", "Mr Bob"} }; var query = Query.EQ("_id",
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);
这是失败的代码:
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);
由于新成员已经列出了
BsonDocument
,您无需再次将其转换为BsonDocument
如果要将多个文档推送到嵌套数组中,则需要使用:
如果您需要某个类的推送列表项,则需要将每个项转换为BsonDocument:
假设newMembers是成员类的列表,那么如果需要将列表推送到嵌套数组,则应执行以下操作:
var upd = Update.PushAll("members", newMembers.Select(x=> x.ToBsonDocument()).ToArray());
更新:
$slice
加载嵌入数组,并检查每个子文档的唯一性李>
有没有办法检查副本?其中一个新条目可能具有子文档中已存在的name=“Mr Bob”。有没有办法在$addToSet中检查这种情况?@Projapati:没有办法使用
push
。为什么不直接使用$addToSet?就像一个符咒。我不得不添加.ToBsonDocument(),因为它没有语法错误。我想关键是要整理。感谢Andrew。AddToSetEach()似乎插入了重复项,因为每个成员都有不同的_id(ObjectId.generateWid),即使名称相同。这使得每个子文档都是唯一的。是否仅从列表中推送名称字段中具有不同值的内容?
groups:
{
_id:1,
members:[
{
_id:1,
name: "Mr Bob"
},
{
_id:1,
name: "Mr Tom"
}
]
}
var upd = Update.PushAll("members", newMembers.ToArray());
var upd = Update.PushAll("members", newMembers.Select(x=> x.ToBsonDocument()).ToArray());