2
我正在嘗試將列表推送到文檔的子文檔。 如果我插入的BsonDocument它的工作原理如下圖所示只是一個單一的對象:如何將List <>推送到mongodb中的子文檔中?
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"
}
]
}
有沒有辦法檢查重複?其中一個新條目的名稱=「Mr Bob」已存在於子文檔中。有沒有辦法像$ addToSet一樣檢查它? – kheya 2011-06-03 21:05:38
@Projapati:沒有辦法用'push'來完成。爲什麼不使用$ addToSet? – 2011-06-03 21:10:18
就像一個魅力。我必須添加.ToBsonDocument()作爲w/o它,它會給出語法錯誤。我認爲關鍵是ToArray()。謝謝安德魯。 – kheya 2011-06-03 22:00:15