У меня есть подобный документОбновление вложенного массива в Монго с C#
{
"_id": "63dafa72f21d48312d8ca405",
"tasks": [{
"_ref": "63d8d8d01beb0b606314e322",
"data": {
"values": [{
"key": "Deadline",
"value": "2014-10-13"
}]
}
}, {
"_ref": "84dd046c6695e32322d842f5",
"data": {
"values": []
}
}]
}
Теперь я хочу, чтобы обновить значение внутри значений, которое внутри данные, если _ref поля сделать сопрягать мой вход.
Моего код до сих пор:
public bool updateProject(Project dbPro, Project pro)
{
var collection = db.GetCollection<BsonDocument>("projects");
var filter = Builders<BsonDocument>.Filter.Eq("_id", ObjectId.Parse(dbPro.Id));
var update = Builders<BsonDocument>.Update.AddToSetEach("tasks", pro.Tasks);
var result = collection.UpdateOne(filter, update);
if (result.IsModifiedCountAvailable)
{
if (result.ModifiedCount == 1)
{
return true;
}
}
return false;
}
На данный момент этот код делает только Append документов, как новые задачи, вместо того, чтобы добавлять значения в согласующих задачи. Может быть, у кого-то есть идея, как добиться такого поведения?
UPDATE
Я попробовал это, как сказал @Shane Oborn. Но он все еще не работает для меня.
var collection = db.GetCollection<BsonDocument>("projects");
var filter = Builders<BsonDocument>.Filter.Eq("_id", ObjectId.Parse(dbPro.Id));
var update = Builders<BsonDocument>.Update.Push("tags", buildBsonArrayFromTags(pro.Tags));
var result = collection.UpdateOne(filter, update);
if (result.IsModifiedCountAvailable)
{
if (result.ModifiedCount == 1)
{
return true;
}
}
return false;
}
Вместо того чтобы переопределить данные, он добавляет массив к моему массиву.
UPDATE
ОК вместо толчка я сделал нужно установить. И тогда это сработало.
Посмотрите на [этот вопрос] (http://stackoverflow.com/questions/ 18148166/find-document-with-array-that-contains-a-specific-value), он может вам помочь. –
Спасибо. Я попробую. – Kleisophabo