2016-09-13 8 views
0

Я использую mongodb native и Node.js 6.5.0.Невозможно передать данные в текущий объект внутри базы mongo

У меня есть пользовательский объект в MongoDB, которое структурировано, как:

{ 
    "_id" : ObjectId("57d7d294d96a73d128c46db9"), 
    "id" : "105862592064", 
    "labels" : [ 

    ] 
} 

У меня есть цикл (для каждого пользователя, найденного) получить данные из API, а затем толкать его в атрибут объекта типа массива. Если идентификатор пользователя user.id и данные для ввода - resp.labels.

Это мой код:

db.collection('users').update(
      {"id":user.id}, 
      {"$push":{"users.labels":resp.labels}} 
) 

Это не возвращает ошибку, ни он делает объекты обновления. Что я сделал не так?

+0

db.collection ('пользователи') обновление ( . {_id: user.id, этикетки: []}, {$ набора: { " метки. $ ": resp.labels}} ) попробуйте с этим –

ответ

1

$push предназначен для отжимания один элемент массива. Используйте $push вместе с $each, чтобы нажать несколько элементов. Кроме того, кавычки вокруг объекта этикетки не должен быть необходимыми:

db.collection('users').update(
     { id:user.id }, 
     { $push: { labels: { $each: resp.labels } } } 
) 
0

Попробуйте включить {upsert:true}:

db.collection('users').update(
      {"id":user.id}, 
      {"$push":{"users.labels":resp.labels}}, 
      {"upsert": true} 
); 

Upsert вставляет новое значение, если он уже не существует.

+0

В строке 3 есть синтаксическая ошибка. – Kunok

+0

Однако есть проблема. Он создает новый атрибут, называемый пользователями, и внутри этого объекта пользователи создают объект ярлыков, который включает метки. – Kunok

1

Попробуйте $set

db.collection('users').update(
     {"id":user.id}, 
     {$set:{"users.labels":"hola"}}) 
2
Try this: 

db.collection('users').update(
      {"id":user.id},, 
      { 
      $push: { 
       labels: { 
        $each: //yourArray 
       } 
      } 
      } 
     );