在MongoDB中,我有一个有效的更新查询:
db.posts.update(
{
"_id" : ObjectId("..."),
"Comments.Reference" : 123
},
{
$push :
{
"Comments.$.Notes": { Text: "Some description here" }
}
});
这将找到具有匹配Id的Post文档,并且对于具有该数组中匹配引用的Comments对象,它会将一个新对象推送到其中的Notes数组中。
但是,当我使用C#和驱动程序时,我想看看是否可以使用LINQ创建它。
我倒下的地方是创建一个更新查询,转换为创建$ position操作符。
IMongoUpdate update = Update<Post>.Push(t => t.Comments.First().Notes,
BsonDocument.Parse("{ Text: \"Test\"}");
我把First()作为第一个猜测并让它进行编译,但是它会抛出一个错误,说它不能序列化它。
是否可以重新创建,或者我只需要恢复使用“Comments。$。Notes”的字符串查询?
编辑:要更新,这是有效的,但不提供类型安全:
IMongoUpdate update = Update.Push("Comments.$.Notes",
BsonDocument.Parse("{ Text: \"Test\"}");
答案 0 :(得分:4)
已添加此功能:
https://jira.mongodb.org/browse/CSHARP-1046
直接从jira案例中复制:
Builders<Entity>.Update.Set(x => x.MyArray[-1].Value, 10);
将产生
{ $set: { "MyArray.$.Value", 10 } }
答案 1 :(得分:0)
不幸的是,目前它似乎不受支持:(