2014-10-11 2 views
3

I имеет следующую структуру для документаMongoDb тянуть с позиционным оператором

{ 
_id: 12342342 
items: [ 
    { 
     ownerId: 123, 
     dates: ['2014-10-01', '2014-10-02'] 
    }, 
    { 
     ownerId: 234, 
     dates: ['2014-10-01', '2014-10-02'] 
    }, 

] 
} 

Я хочу, чтобы вытащить конкретное значение из фиников, где OwnerId родительского объекта является конкретным значением.

У меня есть

var myDate = '2014-10-01' 
    db.collection('things').update({'items.dates': {$in: [myDate]}}, 
     {$pull: { 'items.$.dates': myDate } }, {multi: true}); 

Но это будет тянуть за любой OwnerId, который не то, что я хочу. Может ли кто-нибудь помочь мне получить правильный синтаксис запроса?

спасибо.

ответ

2

Как вы хотите тянуть на конкретном OwnerId, вам нужно указать, что OwnerId в запросе части обновления методом. Это ссылка для Вас:

var myDate = '2014-10-01'; 
var ownerId = 123; 

db.things.update({ 
    'items' : { 
     '$elemMatch' : { 
      ownerId : ownerId, 
      dates : { 
       $in : [ myDate ] 
      } 
     } 
    } 
}, { 
    $pull : { 
     'items.$.dates' : myDate 
    } 
}, { 
    multi : true 
}); 

На самом деле, оператор $ в ненужно здесь.

var myDate = '2014-10-01'; 
var ownerId = 123; 

db.things.update({ 
    'items' : { 
     '$elemMatch' : { 
      ownerId : ownerId, 
      dates : myDate 
     } 
    } 
}, { 
    $pull : { 
     'items.$.dates' : myDate 
    } 
}, { 
    multi : true 
}); 
+0

как $ не нужно? date - это массив – Jeff

+1

@Jeff, выражение равенства '{date: myDate}' означает, что даты сами по себе равны myDate, или любой элемент дат (если даты - тип массива) равен myDate. Тип массива относительно немного «сложный» в MongoDB. :) – Wizard

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