В MongoDB У меня есть запрос на обновление, который работает:Воссоздание позиционного оператора массива с помощью LINQ и MongoDb
db.posts.update(
{
"_id" : ObjectId("..."),
"Comments.Reference" : 123
},
{
$push :
{
"Comments.$.Notes": { Text: "Some description here" }
}
});
Это находит Post документ с Id соответствия и Комментарии объекта со ссылкой соответствия в этом массиве , он будет вставлять новый объект в массив Notes внутри него.
Однако, поскольку я использую C# и драйвер, я хотел посмотреть, было ли возможно создать это с помощью LINQ.
Где я падаю, создается запрос на обновление, который переводит на создание оператора $ positional.
IMongoUpdate update = Update<Post>.Push(t => t.Comments.First().Notes,
BsonDocument.Parse("{ Text: \"Test\"}");
Я поставил первый() в качестве первого приближения и получить его для компиляции, однако он выдает ошибку сказать, что он не может сериализовать его.
Возможно ли воссоздать это, или мне просто нужно вернуться к использованию строкового запроса «Комментарии.
Edit: Только для обновления, это то, что работает, но не обеспечивает безопасность типов:
IMongoUpdate update = Update.Push("Comments.$.Notes",
BsonDocument.Parse("{ Text: \"Test\"}");
Не могли бы вы поделиться C# для Post вашего класса? Прошло некоторое время с тех пор, как я использовал драйвер Mongo C#, но я постараюсь помочь, если смогу :) – Jordan
https://jira.mongodb.org/browse/CSHARP-531 – Jordan
Отличная находка! Я считаю, что так хорошо, как ответ на данный момент Мартина, в настоящее время он не поддерживается. Хотите продвинуть этот комментарий в ответ, и я пометю его как «Принято»? – Kasaku