Как использовать модификатор $ push update в MongoDB и C #, при обновлении массива в документе - PullRequest
13 голосов
/ 11 июля 2011

Я запустил следующий код в оболочке Монго:

db.unicorns.insert({name:  'Dunx',  loves:  ['grape',  'watermelon']});

и теперь у меня есть что-то подобное в моей коллекции MongoDB:

{name: 'Dunx', loves: ['grape', 'watermelon']}

Как видите, loves - это массив.

Вопрос

Как написать код C # с помощью официального драйвера C #, который выполняет следующие действия:

db.unicorns.update({name: 'Aurora'}, {$push: {loves: 'sugar'}})

Приведенный выше код прекрасно работает в оболочке Монго.

Ответы [ 3 ]

16 голосов
/ 11 июля 2011

должно быть что-то вроде этого:

unicorns.Update(Query.EQ("name", "Aurora"), Update.Push("loves", "sugar"));
9 голосов
/ 03 ноября 2015

Я также хотел бы проиллюстрировать, как это сделать, используя другой синтаксис

var filter = Builders<Unicorn>
             .Filter.Eq(e => e.Name, "Aurora");

var update = Builders<Unicorn>.Update
        .Push<String>(e => e.Likes, like);

await fantasyContext.Unicorns.FindOneAndUpdateAsync(filter, update);
0 голосов
/ 28 марта 2017

Чтобы сделать это с обновленным синтаксисом и обычными BsonDocument s вместо определенных объектов, используйте следующее:

var filter = Builders<BsonDocument>.Filter.Eq("name": "Aurora");
var update = Builders<BsonDocument>.Update.Push("loves", "sugar"):

// you can also use the async update method from Alex's answer here
var result = fantasyContext.Unicorns.UpdateOne(filter, update);
...