항목의 'voteId'필드를 일치시켜 voteResultList의 항목을 업데이트하려고합니다.
문서:
{
voteDocumentId: "....",
voteResultList: [
{
voteId: "....",
voteResult: "NA"
},
{
voteId: "....",
voteResult: "Against"
}
....
]
}
몽고에서는이 명령을 사용할 수 있고 제대로 작동합니다.
db.getCollection('VoteCollection').update({'voteDocumentId': '....', 'voteResultList.voteId': '....'},{'$set': {'voteResultList.$.voteResult': 'Approve'}})
csharp mongo 드라이버를 사용하는 csharp 코드에서이 json 문서에서 필터 bson 문서를 생성했습니다.
{'voteDocumentId': '....', 'voteResultList.voteId': '....'}
그런 다음이 코드로 업데이트 bson 문서를 생성했습니다.
Builders<BsonDocument>.Update.Set("voteResultList.$.voteResult", "Approve")
하지만 MongoCollection.UpdateMany (filter, update), mongoUpdateResult.ModifiedCount = 0을 호출하고 mongodb 문서에서 아무것도 변경되지 않았기 때문에 분명히 올바르게 수행하고 있지 않습니다.
그래서 이것을하는 올바른 방법은 무엇입니까?
감사!
여기에 답변을 기반으로 한 완전한 작업 예제가 있습니다 .Mongo 업데이트 배열 요소 (.NET 드라이버 2.0)
using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Linq;
namespace ConsoleApp1
{
public class VoteCollection
{
public ObjectId Id;
public string voteDocumentId;
public VoteResult[] voteResultList;
}
public class VoteResult
{
public string voteId;
public string voteResult;
}
public class Program
{
public static IMongoDatabase _db;
static void Main(string[] args)
{
var collection = new MongoClient().GetDatabase("test").GetCollection<VoteCollection>("VoteCollection");
collection.InsertOne
(
new VoteCollection
{
voteDocumentId = "foo",
voteResultList = new []
{
new VoteResult { voteId = "bar1", voteResult = "NA" },
new VoteResult { voteId = "bar2", voteResult = "Against" },
}
}
);
var filter = Builders<VoteCollection>.Filter.Where(voteCollection => voteCollection.voteDocumentId == "foo" && voteCollection.voteResultList.Any(voteResult => voteResult.voteId == "bar1"));
var update = Builders<VoteCollection>.Update.Set(voteCollection => voteCollection.voteResultList[-1].voteResult, "Approve");
collection.UpdateMany(filter, update);
Console.ReadLine();
}
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다