在数组 mongoose 中插入元素在 NodeJS 中创建 Object

Posted

技术标签:

【中文标题】在数组 mongoose 中插入元素在 NodeJS 中创建 Object【英文标题】:Inserting elements in array mongoose creates Object in NodeJS 【发布时间】: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]"
         ],

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

【问题讨论】:

【参考方案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!"); 
);

【讨论】:

以上是关于在数组 mongoose 中插入元素在 NodeJS 中创建 Object的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Mongoose 在 MongoDB 中插入 JSON 数组

如何使用 mongoose 和 NodeJs 在 Mongodb 的数组字段中插入数据

Mongoose 在多个数组中填充嵌套元素

使用 mongoose 在 MongoDB 中批量插入

如何访问在 Mongoose 模式对象数组的另一个数组中定义的数组元素?

javascript 在Mongoose中更新和删除数组元素