mongoose 我在使用moongose一对一关系的节点中的反向关系中遇到问题

jljoyd4f  于 2022-12-13  发布在  Go
关注(0)|答案(1)|浏览(104)

基本上,我为用户设置了三个角色
1.管理员
1.卖方
1.买主
这是我的用户方案

const userSchema = mongoose.Schema({
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true, select: false },
  role: { type: String, enum: ['seller', 'buyer'], required: true },
  admin: { type: mongoose.Schema.Types.ObjectId, ref: 'Admin' },
  seller: { type: mongoose.Schema.Types.ObjectId, red: 'Seller'},
  buyer: { type: mongoose.Schema.Types.ObjectId, ref: 'Buyer' },

})
userSchema.plugin(uniqueValidator)
module.exports = mongoose.model('User', userSchema)

这是我的用户角色架构卖方架构

const sellerUserSchema = mongoose.Schema({
  user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
  firstName: { type: String, required: true },
  lastName: { type: String },
  email: { type: String, required: true, unique: true },
  dob: { type: Date, min: '1950-01-01', max: new Date() },
})

买方模式

const buyerUserSchema = mongoose.Schema({
  user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
  firstName: { type: String, required: true },
  lastName: { type: String },
  email: { type: String, required: true, unique: true },
  dob: { type: Date, min: '1950-01-01', max: new Date() },
})

现在当我这样做

const usersQuery = Seller.find().populate('user').then(d=>{
        console.log('details',d)
    })

我得到正确的结果,就像我得到卖家数据,然后用户对象,包括所有细节,你可以在截图下面检查结果

但当我喜欢
const usersQuery = User.find().populate('seller','buyer')
我没有得到任何类型的卖方或买方数据这里是附加的结果

因此,我的预期结果就像我得到了用户数据和内部卖方买方对象
下面是我的MongoDB的数据库结构

用户

卖家

买家收藏和卖家一样
任何帮助都将不胜感激

wfveoks0

wfveoks01#

由于在用户模式中没有“seller”或“buyer”的引用,因此应尝试Aggregate Instead

User.aggregate([
  {
    $lookup: {
      from: "sellers",
      localField: "_id",
      foreignField: "user",
      as: "sellerSchemaUser"
    }
  },
  {
    $lookup: {
      from: "buyers",
      localField: "_id",
      foreignField: "user",
      as: "buyerSchemaUser"
    }
  }
])

正如我从屏幕截图中看到的,您的“seller”集合中还没有任何文档,因此您现在将在“sellerSchemaUser”中得到一个空数组。注意:Lookup将以对象数组的形式从其他集合中返回匹配的文档。

相关问题