2017-03-19 9 views
0

ドライバのバージョン2.4.2を使用して、各新しいサブ文書を最上位の配列に挿入するためにC#を使用しようとしています。次のコマンドはうまく機能モンゴで :mongodb c#pusheach position subdocument

{ 
    "_id" : ObjectId("586e9ec5ab3d05173cd88957"), 
    "location" : [ 
     { 
      "value" : "Site", 
      "time" : ISODate("2017-02-24T16:05:44.204Z"), 
      "user" : "user1" 
     } 
    ] 
} 

しかし、これまでのところ、私はC#で同じ結果を得ることに成功していない:

db.getCollection('Operation').update(
{_id: ObjectId('586e9ec5ab3d05173cd88957') }, 
{$push: {'location': {$each: [ { 'value' : 'Site', 'time' : ISODate('2017-02-24T16:05:44.204Z'), 'user' : 'user1' } ], $position: 0 } } } 
) 

は、その後結果があります。私はこれまで試してみました:

var filter = Builders<BsonDocument>.Filter.Eq("_id", ObjectId.Parse("586e9ec5ab3d05173cd88957")); 
var update = Builders<BsonDocument>.Update.PushEach("location", new List<BsonArray>() { new BsonArray { new BsonDocument { { "value", "Site" }, { "time", DateTime.UtcNow }, { "user", "user1" } } } }, position: 0); 
collection.UpdateOne(filter, update); 

もテキストですべてを指定しようとしていない大成功:

collection.UpdateOne("{ '_id': ObjectId('586e9ec5ab3d05173cd88957') }", "{ '$push': {'location': { '$each': [ { 'value' : 'Site', 'time' : ISODate('2017-02-24T16:05:44.204Z'), 'user' : 'user1' } ], $position: 0 } } }"); 

任意の提案を?

答えて

0

タイプミスのために私はしばらく時間がかかりました。ユーザー1892538の回答が正しいです。これは動作します:

var update = Builders<BsonDocument>.Update.PushEach("location", new BsonArray { new BsonDocument { { "value", "Site" }, { "time", DateTime.UtcNow }, { "user", "user1" } } }, position: 0); 
0

PushEachは、List<BsonArray>ではなく、BsonArrayというパラメータが必要です。

あなたはBSONドキュメントにシリアライズする必要はありません

var update = updateBuilder.PushEach("location", locationBSONArray); 

のような何かをしなければなりません。

+0

お手伝いをありがとうございます。 新しいBsonArray {新しいBsonDocument {{"value"、 "Site"}、{"time"、DateTime.UtcNow}、{"user"、 "user1"}私の問題はまだ変換する方法がわからないことです。 }} をBsonArrayパラメーターに変換します。 .AsBsonArrayを追加するだけでは機能しません。 – Jaap