【问题标题】:Pushing item to Mongodb collection array将项目推送到 Mongodb 集合数组
【发布时间】:2017-07-10 01:40:46
【问题描述】:

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

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

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

//MongoDB数据

{
"_id" : ObjectId("58aa2eb1de7b414237b93981"),
"email" : "test@gmail.com",
"firstName" : "test",
"completed" : [],
"playing" : [],
"__v" : 2

// 接口

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);
    });

【问题讨论】:

  • 能否将用户猫鼬模式添加到问题中?
  • 你确定它现在有效吗? req.params.id 为字符串,需要查询ObjectId。
  • 更新并回答了我自己的问题...谢谢大家调查

标签: node.js mongodb mongoose mongoose-schema


【解决方案1】:

发现问题!我重构了代码,但没有改变用户模型。除了用户模型之外,我在所有地方都将“gamesCompleted”更改为“已完成”。因此,查询失败。我希望,猫鼬会给我一个更好的错误,然后只是 { ok: 0, n: 0, nModified: 0 }

【讨论】:

    【解决方案2】:

    使用$addToSet 停止数组中相同数据的重复

    $addToSet 不会将项目添加到给定字段,如果它已经包含它,但$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
            }
    });
    

    【讨论】:

    • 感谢您的提示...将确保,我将 $push 替换为 $addToSet
    猜你喜欢
    • 2017-03-26
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2019-07-20
    • 2016-03-23
    • 1970-01-01
    相关资源
    最近更新 更多