2015-09-08 1 views
1

Я пытаюсь выполнить массовую операцию обновления с помощью Official Mongo c# 2.0 driver с помощью следующего кода:MongoDb C# драйвер Ошибка обновления 2,0 насыпной

var query = 
Builders<Profile>.Filter.In(p => p.userId, listBounce.Values.ToList()) & 
Builders<Profile>.Filter.In(p => p.ID, listBounce.Keys.Select(x=> new ObjectId(x)). 
ToList()); 

var update = Builders<Profile>.Update.Set(p => p.MailLists[-1].Status, (int)wrongEmailStatusAssetId); 

dbCollection.UpdateManyAsync(query, update).Wait(); 

Но есть следующая ошибка была произошла

{"A write operation resulted in an error.\r\n 
The positional operator did not find the match needed from the query. 
Unexpanded update: p2l.$.status"} 

мне нужно обновить свойства каждого элемента в массиве, который соответствует запросу. Структура документов:

{ 
    "_id" : ObjectId("55eeb5da965bb036984110b9"), 
    "created" : ISODate("2015-09-08T10:17:59.784Z"), 
    "userId" : 13929, 
    "email" : "[email protected]", 
    "firstName" : "Skrillex", 
    "lastName" : "Skrillex", 
    "phoneNumber" : "", 
    "isUnsubscribed" : false, 
    "isAboveLimit" : false, 
    "status" : 0, 
    "userAgent" : 9760, 
    "isDeleted" : false, 
    "p2l" : [ 
     { 
      "listId" : 45165, 
      "status" : 131, 
      "subscriptionDate" : ISODate("2015-09-04T06:24:55.763Z") 
     } 
    ] 
} 
+0

Еще одно стадное чрезмерное использование лямбда-операций. Не могли бы вы попытаться показать фактический документ, который вы ожидаете. Основная проблема заключается в том, что ваша часть запроса никогда не пытается «сопоставить» элемент массива, чем может быть передана позиционному '' 'оператору в рамках« обновления », как это реализовано. Отмечая, что это «ясно, как грязь» от всего ненужного лямбда-мусора здесь. Кто-то из MSDN должен быть расстрелян. –

+0

'db.profiles.update ( {" userId ": {" $ in ": [13929]}," _id ": {" $ in ": [ObjectId (" 55eeb5da965bb036984110b9 ")]}}, {$ set : {"p2l. $. status": 131}} ) 'Почему этот код не работает? –

ответ

0

Просто добавьте Builders<Profile>.Filter.Exists(p=>p.MailLists) в query и проблема может быть решена.