【问题标题】:can't push Object into the array in mongoose/mongodb?不能将对象推入 mongoose/mongodb 的数组中?
【发布时间】:2014-01-17 10:15:12
【问题描述】:

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

    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:''}} 推入数组,我无法找出问题所在。

【问题讨论】:

  • 我建议您创建另一个模型,例如“Msg”并设置所需的字段。在插入子文档时使用此 Msg 模型

标签: node.js mongodb mongoose


【解决方案1】:

您可以为 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 操作。这对你有用

【讨论】:

  • 为什么当我尝试这个解决方案时,test1:Url,它会抛出一个错误:未捕获的异常:TypeError: Undefined type at `test1' 你尝试嵌套模式吗?您只能使用 refs 或数组进行嵌套。我正在使用猫鼬 3.8.2
  • 我忘记启动 Url 模型。我尝试使用嵌套对象显示嵌入结构
猜你喜欢
  • 1970-01-01
  • 2013-03-15
  • 2019-03-28
  • 1970-01-01
  • 2018-06-17
  • 2023-01-12
  • 2012-01-17
  • 2015-11-14
相关资源
最近更新 更多