2014-10-14 2 views
0

Я использую драйвер MongoDB C#, и я хочу знать, как очистить вложенный массив в MongoDB, используя запрос на обновление.Как очистить вложенный массив в коллекции в MongoDB?

Вот моя коллекция, содержащая некоторые документы, следующие ниже «схемы»:

{ 
    "_id": { "$oid": "543cd94799c3ff7a2850a1b6" }, 
    "Type": 1, 
    "Information": [ 
    { 
     "Type" : 2, 
     "Colors": [], 
     "Heights": [], 
     "Widths": [] 
    } 
    ] 
} 

То, что я хочу, чтобы очистить (удалить все элементы) Цвета, высоты и ширины вложенных массивов.

Я пытался что-то вроде:

var query = Query.And(Query.Exists(Entity.INFORMATION + "." + Information.COLORS), 
         Query.Exists(Entity.INFORMATION + "." + Information.HEIGHTS), 
         Query.Exists(Entity.INFORMATION + "." + Information.WIDTHS), 
         Query.EQ(Entity.TYPE, typeId), 
         Query.ElemMatch(Entity.INFORMATION, Query.EQ(Information.TYPE, informationTypeId))); 

var update = MongoDB.Driver.Builders.Update.Set(Entity.INFORMATION + ".$." + Information.WIDTHS, new BsonArray(new Width[0])) 
              .Set(Entity.INFORMATION + ".$." + Information.COLORS, new BsonArray(new Color[0])) 
              .Set(Entity.INFORMATION + ".$." + Information.HEIGHTS, new BsonArray(new Height[0])) 
              .Set(Entity.INFORMATION + ".$." + Information.TYPE, BsonNull.Value); 

Collection.Update(query, update, UpdateFlags.Multi); 

Но, похоже, не работает.

Пожалуйста, помогите.


Я пробовал следующий родной запрос, но, кажется, не работает:

db.myCollection.update(
{ 
    "Information.Colors": { 
    $exists: true 
    }, 
    "Type": 1 
}, 
{ 
    $set: { 
    "Information.$.Colors": [], 
    "Information.$.Widths": [], 
    "Information.$.Heights": [], 
    "Information.$.Type" : null 
} 
}, 
false, true) 

Он работает только с первым документом в коллекции.

Остальные остаются неизменными ... :(

+0

есть ли кто-нибудь, кто может помочь мне с этим –

ответ

1

$ необходим для вложенного массива, а также найти запрос с доступом к обновлению и необходимой

 var update = Update 
      .Set("Information.$.Heights", new BsonArray(new int[0])) 
      .Set("Information.$.Colors", new BsonArray(new int[0])) 
      .Set("Information.$.Widths", new BsonArray(new int[0])); 

     var q = Query.Exists("Information.Heights"); // important 

     c.Update(q, update, UpdateFlags.Multi); 
+0

создание Обновит? e переменная правильная? Некоторые люди используют «Информация. Цвета цветов» и т. Д. В чем разница? –

+0

Мой пример с тестом http://pastebin.com/jLg7V1Px – pil0t

+0

«Информация» - это не объект json, а массив json. Я думаю, что это сложнее, когда массив вложен в другой массив. Любое предложение? –

Смежные вопросы