2017-03-19 2 views
0

Ich versuche C# zu verwenden, um jedes neue Filialdokument in einem Array an der obersten Position mit Treiberversion 2.4.2 einzufügen. In Mongo den folgenden Befehl funktioniert gut:mongodb C# pusheach Position Filialdokument

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

Dann ist das Ergebnis:

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

Aber so weit ich es nicht schaffen das gleiche Ergebnis in C# zu bekommen. Ich habe bisher versucht:

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); 

Und auch keinen Erfolg versucht, all in Text angeben:

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

Irgendwelche Vorschläge?

Antwort

0

Nahm mich eine Weile wegen eines Tippfehlers. Die Antwort von user1892538 war korrekt. Dies funktioniert:

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

PushEach erwartet nur einen BsonArray Parameter, kein List<BsonArray>.

Sie sollten so etwas wie

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

Es besteht keine Notwendigkeit zu BSON Dokument serialisiert tun.

+0

Vielen Dank für Ihre Hilfe. Als mein Problem ist immer noch, dass ich nicht weiß, wie man konvertiert: neue BsonArray {neue BsonDocument {{"Wert", "Site"}, {"Zeit", DateTime.UtcNow}, {"Benutzer", "Benutzer1"} }} in einen BsonArray-Parameter. Das Hinzufügen von .AsBsonArray funktioniert nicht. – Jaap