【问题标题】:push all element of array in subdocument while saving document在保存文档时将数组的所有元素推送到子文档中
【发布时间】:2018-04-12 17:25:19
【问题描述】:

我想推送数组的元素来创建子文档,

我的架构

var chatGroup = new Schema({

name : {
    type : String,
    default : null 
},
members: {
    type : [subSchemaForMember]
},

}, { 集合:'chatGroup' });

var subSchemaForMember = new Schema({

user_id   : {type : Schema.Types.ObjectId , ref : 'user'}},{_id : false});

我保存文档的查询是

var chatGroup = new ChatGroup({

        name       : req.body.name,
        image      : req.body.image,
        created_by : req.body.celebrity_id,
        $pushAll   : {'members' : req.body.members}
    })

req.body.memebers = ['someid','someid','someid']

请帮助我想在没有任何循环的情况下做到这一点

【问题讨论】:

  • subSchemaForMembers 只是一个字符串吗?至少当你说req.body.members = ['someId', 'someId', 'someId']时,这就是你所代表的?
  • 也就是说,是members: { type: [String] }吗?
  • members : [{ user_id : {type : Schema.Types.ObjectId , ref : 'user'} ,}] 就像这个子文档

标签: node.js mongoose


【解决方案1】:

我没有看到您实际保存文档,仅在构造函数上调用 new。您需要显式调用保存。构造对象后。有关创建文档的文档,请参见此处:http://mongoosejs.com/docs/models.html

另外,$pushAll 的使用仅适用于当您在 mongodb 中已有一个对象时,该对象具有现有值,并且您希望保留这些值并将其他值推送到数组中(因此在您的示例中,您可以简单地分配数组到members)。

另外值得注意的是,当前的 mongoose 文档表明 $pushAll 已弃用,您应该将 $push$each 一起使用,但适用相同的规则,请参见此处:

https://docs.mongodb.com/manual/reference/operator/update/push/#append-multiple-values-to-an-array

【讨论】:

  • 你在保存模型吗?您的示例没有这样做,正如我所说,我不确定您是否应该在新对象上使用 push。只需分配 id 数组即可。
猜你喜欢
  • 1970-01-01
  • 2014-05-28
  • 2012-09-28
  • 2018-05-17
  • 1970-01-01
  • 2015-06-08
  • 2018-12-09
  • 2016-10-12
  • 2017-01-11
相关资源
最近更新 更多