【问题标题】:how to use model1 reference in model2 so that changes in model1 reflects in model2 automatically如何在model2中使用model1引用,以便model1中的更改​​自动反映在model2中
【发布时间】:2017-01-20 00:36:11
【问题描述】:

我有两个模型组模型和用户模型

用户模型:

var mongoose    =   require('mongoose');
var userSchema  = mongoose.Schema({
     profilePic : String,
     firstName  : String,
     lastName   : String,
     dateOfBirth_DateObject     : { 
        type : Date ,   
        default : Date(1994-03-18)
     },
     yearOfBirth_Integer : { 
        type : Number,  
        default : 0 
     },
     monthOfBirth_Integer  : { 
        type : Number,  
        default : 0 
     },
     dayOfBirth_Integer : { 
        type : Number,  
        default : 0 
     },
     gender_String  : String
)};
module.exports = mongoose.model('user', userSchema,'user');

组模型:

var mongoose       =   require('mongoose');
var groupSchema    =   mongoose.Schema({
   members      :   [{
        id      :   {
           type : mongoose.Schema.Types.ObjectId,
           ref  : 'user'
        },
        firstName   :   String,
        lastName    :   String,
        profilePic :    String

    }]
});

module.exports     =    mongoose.model('group', groupSchema,'group');

因此,当用户上传新的个人资料图片时,该图片的 url 已保存在用户模型中,但该用户的个人资料图片也应在组成员数组中自动更改。

【问题讨论】:

  • 您似乎可以通过从成员数组中删除所有属性并使其成为用户数组来更简单地做到这一点。然后对组模式进行任何查询,填充用户数组,您将拥有所有数据,包括第一张、最后一张和个人资料图片。您似乎在不需要的地方复制数据。
  • 类似:var groupSchema = mongoose.Schema({ members: [{ type: mongoose.Schema.Types.ObjectId, ref: 'user'}]);。然后在对组架构的查询中,例如find(),执行如下操作:Group.find().populate('members'),您将拥有一组用户,包括姓名和个人资料图片
  • 实际上还有其他字段,但我只想将名字和姓氏和个人资料图片填充到组模型中
  • 在这种情况下,您可以传递不想填充的属性列表:.populate("members", "-<field1> -<field2> -<etc...>"),它将排除这些属性。

标签: node.js mongoose mongoose-schema mongoose-populate


【解决方案1】:

您只需要将架构更改为

var groupSchema = mongoose.Schema({members : [{
    id      :   {
       type : mongoose.Schema.Types.ObjectId,
       ref  : 'user'
    },
    otherprop1:   String,
    otherprop2  :   String,

}]});

然后在find中使用populate获取用户数据

group.find({}).populate({path:"user", select: "firstName lastName profilePic"})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多