#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
).
Обновите множество документов, эквивалентных
{ 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. Это решение решило проблему, большое вам спасибо
![]()