2017-02-20 5 views
0

Я пытаюсь нажать значение для коллекции коллекции mongodb arrayList (user.completed), но он не обновляется, хотя мой код кажется правильным.Нажатие элемента на массив коллекции Mongodb

Когда я вызываю вызов API, значения передаются, однако «$ push» не добавляет значение к заполненному массиву !! Что мне здесь не хватает?

Когда я пытаюсь нажать на значение для строки, я получаю ошибку мангуста, как и ожидалось. Но когда я пытаюсь передать значение неопределенному ключу («abc»), новый массив не создается, как это предлагает документация mongodb! Не уверен, что здесь происходит!

// MongoDB данных

{ 
"_id" : ObjectId("58aa2eb1de7b414237b93981"), 
"email" : "[email protected]", 
"firstName" : "test", 
"completed" : [], 
"playing" : [], 
"__v" : 2 

// API

import mongoose from 'mongoose' 
import { Router } from 'express' 
import User from './../model/user' 

api.put('/completed/:id', (req, res) => { 
    User.update(
     { "_id": req.params.id }, 
     { "$push": { 
      "completed": req.body.completed 
     }} 
    ) 
    .then(doc => res.send(doc), err => res.status(400).send(err)) 
}) 

// Запрос

var request = require("request"); 

var options = { 
    method: 'PUT', 
    url: 'http://localhost:8008/v1/user/completed/58aa2eb1de7b414237b93981', 
    headers: { 
     'content-type': 'application/json' }, 
     body: { completed: { game: 'A', player: 'B' } }, 
     json: true 
    }; 

    request(options, function (error, response, body) { 
     if (error) throw new Error(error); 
     console.log(body); 
    }); 
+1

Не можете добавить комментарий, который вы видите на схеме? –

+0

Вы уверены, что это работает сейчас? req.params.id - это строка, и вам нужно запросить ObjectId. –

+0

обновил и ответил на мой собственный вопрос ... спасибо, что посмотрели его ребята – rex

ответ

0

Нашли проблему! Я реорганизовал код, но не изменил модель пользователя. Я изменил «gamesCompleted» на «завершен» во всех местах, кроме модели пользователя. Следовательно, запрос не удался. Я надеюсь, мангуст даст мне лучшую ошибку, то просто {ОК: 0, п: 0, nModified: 0}

1

использование $addToSet прекратить дублирование одних и тех же данных в массиве

$addToSet не добавит item к данному полю, если он уже содержит его, но $push добавит заданное значение в поле, существует ли оно или нет.

User.update({ "_id": req.params.id }, 
    { $addToSet: { "completed": req.body.completed } }, function (err, d) { 
     if (!d.nModified) { 
      // same value entered won't add to the array 
     } else { 
      // new value entered and will add to the array 
     } 
}); 
+0

Спасибо за советы ... убедитесь, что я заменил $ push на $ addToSet – rex

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