Я столкнулся с тем, что я могу понять только как ошибку в драйвере C#.Добавление OfType <T> на MongoCollection «нарушает» поведение UpdateOneAsync
Это gist иллюстрирует проблему.
Если я бегу
collection.UpdateOneAsync(
"{ \"_id\" : ObjectId(\"5656277cd4d37b13b4e7e009\"), \"Addresses.Index\" : 4 },
"{ \"$set\" : { \"Addresses.$\" : { \"_t\" : [\"Address\", \"EmailAddress\"], \"Index\" : 4, \"MailTo\" : \"[email protected]\" } } }")
я получить желаемый результат.
Если же я использую строителей, чтобы построить определение фильтра и определение обновления, как так:
var filter = Builders<Person> .Filter .And(Builders<Person>.Filter.Eq(p => p.Id, person.Id), Builders<Person>.Filter.Eq("Addresses.Index", 4));
var update = Builders<Person>.Update.Set("Addresses.$", new EmailAddress { Index = 4, MailTo = "[email protected]" });
, то я должен изменить свой призыв обновить быть
await collection.OfType<Person>().UpdateOneAsync(filter, update);
и вызов toType приводит к неправильному addre ss заменяется.
- это коллекция 'IQueryable ' или 'IEnumerable '? Готов поспорить, это IQueryable. –
коллекция IMongoCollection –
О, хорошо. Поэтому он использует ['IMongoCollection.OfType'] (http://api.mongodb.org/csharp/current/html/M_MongoDB_Driver_IMongoCollection_1_OfType__1.htm), а не ['Enumerable.OfType '] (https: // msdn. microsoft.com/en-us/library/bb360913(v=vs.100).aspx) или ['Queryable.OfType '] (https://msdn.microsoft.com/en-us/library/bb344857 (v = vs.100) .aspx). Тогда нет идеи. –