Могу ли я извлечь несколько элементов из массивов, существующих в нескольких документах на C# .Сетевой Драйвер

#c# #.net #mongodb #mongodb-.net-driver

Вопрос:

У меня есть этот код, который извлекает несколько элементов из массива «фрукты» и делает это для всех «хранилищ» в базе данных:

 db.stores.update(
{ },
     { $pull: { fruits: { $in: [ "apples", "bananas" ] } } },
 { multi: true }
)
 

Как я могу перенести это в код C# с помощью драйвера .Net?
Метод UpdateManyAsync следует использовать из пространства имен MongoDB.Driver IMongoCollection, но я не знаю, как выполнить конкретную фильтрацию.

Комментарии:

1. драйвер mongo допускает неявное преобразование между строкой и большинством параметров, поэтому вы можете просто вставить строку { $pull: { fruits: { $in: [ "apples", "bananas" ] } } } в соответствующий UpdateManyAsync аргумент

Ответ №1:

Монго .Сетевой драйвер поддерживает сценарии с нетипизированным документом ( BsonDocument ).

UpdateMany

Обновите множество документов, эквивалентных { multi: true }

Вы можете достичь, как показано ниже:

 MongoClient _client = new MongoClient("mongo connection string");

IMongoDatabase _database = _client.GetDatabase("your DB");
IMongoCollection<Store> _collection = _database.GetCollection<Store>("store");

string[] removedFruits = new string[] { "apples", "bananas" };
FilterDefinition<Store> filter = Builders<Store>.Filter.Empty;

UpdateDefinition<Store> update =
    new BsonDocument("$pull",
        new BsonDocument("fruits",
            new BsonDocument("$in", BsonArray.Create(removedFruits))
        )
    );

_collection.UpdateMany(filter, update);
 
 public class Store
{
    public string[] Fruits { get; set; }

    // Other properties
}
 

Комментарии:

1. Это решение решило проблему, большое вам спасибо 🙂