使用LINQ和MongoDb重新创建位置数组运算符

时间:2014-02-04 23:47:28

标签: c# linq mongodb mongodb-.net-driver

在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\"}");

2 个答案:

答案 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)

不幸的是,目前它似乎不受支持:(

https://jira.mongodb.org/browse/CSHARP-531