【问题标题】:Inserting elements in array mongoose creates Object in NodeJS在数组 mongoose 中插入元素在 NodeJS 中创建 Object
【发布时间】:2015-06-05 17:25:49
【问题描述】:

我正在尝试使用 Mongoose 在数组中插入文档。

这是架构:

var user = new mongo.Schema({
  _id : Number,
  devices:[
      {
        device_id : String,
        type : String
      }
    ]})

NodeJS 中的更新代码如下:

app.put('/user/update',function(req,res){
    var obj = req.body;
    users.update(
        {'user.username' : obj.email},
        {
            'user.username' : obj.email, 
            'user.password' : obj.password, 
            'user.name.first' : obj.name, 
            'user.department' : obj.department, 
            'user.year' : obj.year, 
            'user.college' : obj.college,
            'user.contact.phone': obj.contact,  
            'user.last_login' : obj.last_login,
            $push:{ 
                'devices': {
                     device_id: 'sadasd32u4je3bdjas', 
                     type: 'Windows'
                }
            } 
        }, function(err){
                if(err) 
                    res.json({"foo": String(err)});
                else
                    res.json({"foo": "Successfully Signed up!"}); 
        });
    }
);

但是它插入了类似的东西:

"devices": [
            "[object Object]",
            "[object Object]",
            "[object Object]",
            "[object Object]",
            "[object Object]"
         ],

我哪里做错了?再次感谢。

【问题讨论】:

    标签: arrays json node.js mongodb mongoose


    【解决方案1】:

    使用 findOneAndUpdate() 方法并将 'upsert' 选项设置为 true - 如果对象不存在,则创建对象(默认为 false):

    var obj = req.body;
    var query = {'user.username': obj.email};
    var doc = {
        $set: {
            'user.username': obj.email, 
            'user.password': obj.password, 
            'user.name.first': obj.name, 
            'user.department': obj.department, 
            'user.year': obj.year, 
            'user.college': obj.college,
            'user.contact.phone': obj.contact,  
            'user.last_login': obj.last_login  
        },
        $push: { 
            'devices': {
                 device_id: 'sadasd32u4je3bdjas', 
                 type: 'Windows'
             }
        }
    };
    var options = {upsert: true};
    users.findOneAndUpdate(query, doc, options, function(err){
        if(err) 
            res.json({"foo": String(err)});
        else
            res.json({"foo": "Successfully Signed up!"}); 
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 2013-06-01
      • 2020-11-11
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多