将项目推送到Mongodb集合数组

时间:2017-02-20 16:59:51

标签: node.js mongodb mongoose mongoose-schema

我正在尝试将值推送到mongodb集合arrayList(user.completed),但即使我的代码看起来正确,它也没有得到更新。

当我进行API调用时,值正在传递但是“$ push”没有为已完成的数组添加值!我在这里缺少什么?

当我尝试将值推送到字符串时,我得到了预期的mongoose错误。但是,当我尝试将值推送到未定义的键('abc')时,不会像mongodb文档建议的那样创建新数组!不确定这里发生了什么!

// Mongodb数据

{
"_id" : ObjectId("58aa2eb1de7b414237b93981"),
"email" : "test@gmail.com",
"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);
    });

2 个答案:

答案 0 :(得分:1)

使用<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> <a class="quick-search-container"> <span class="icon"> <i (click)="initQuickSearch()" class="fa fa-search"></i> </span> <input type="search" id="search" placeholder="Search..."> <span class="selector"> <select class="quick-search-selector" id="selector"> <option>VIN</option> <option>Make</option> <option>Model</option> <option>Cow</option> </select> </span> </a>来停止数组中相同数据的复制

$addToSet如果已经包含该项,则不会将该项添加到给定字段,但$addToSet会将给定值添加到字段中是否存在。

$push

答案 1 :(得分:0)

发现问题!我重构了代码但没有改变用户模型。我改变了'游戏'完成&#39;完成&#39;在所有地方,但用户模型。因此,查询失败。我希望,mongoose会给我一个更好的错误然后只是{ok:0,n:0,nModified:0}