无法将对象推入mongoose / mongodb中的数组?

时间:2013-12-30 13:59:27

标签: node.js mongodb mongoose

我构建了一个简单的mongoose模式,如下面的模式

    var schema = new mongoose.Schema({
            user: {type:String, required:true, unique:true},
            msgs: [ 
                     {                  
                        test1:{url:String, name:String},
                        test2:String
                     } 
                   ]
        });

   var model  = mongoose.model('test', schema);

现在我尝试插入文档并将一些值推送到文档中,如下所示

  var update = {"$push":
                   {
                     'msgs':
                       { 
                          'test1':{'name':'default id','url':'default url' } ,
                          'test2': 'abc'   
                       }
                   }
                };

   model.update({user:'username'},update,{ upsert: true },function(err,data){
            if(err) console.error(err);
            else console.log(data);     
   });  

由于模型允许upsert,因此文档插入成功,但是当我查看创建的文档时。 结果是

{
    'user': 'username',
    'msgs':[ { 'test2':'abc', '_id':'xxxxxxxxxx' } ]
}

在我看来,我没有将{test1:{url:'',name:''}}推入数组,我无法弄清楚问题。

1 个答案:

答案 0 :(得分:0)

您可以为Url定义单独的模型,并将其嵌入到msgs> test1字段中,如下所示;

var schema = new mongoose.Schema({
            user: {type:String, required:true, unique:true},
            msgs: [ 
                     {                  
                        test1:Url,
                        test2:String
                     } 
                   ]
        });

var Url = new mongoose.Schema({
    url: {
       type: String
    },
    name: {
       type: String
    }
});

var Url = mongoose.model('Url',Url);

在插入时,定义一个像;

这样的对象
var urlModel = new Url();
urlModel.url = "your_url";
urlModel.name = "your_name";

并尝试upsert操作。这对你有用