【问题标题】:Conditional populate with mongoose有条件地填充猫鼬
【发布时间】:2021-10-07 22:19:31
【问题描述】:

我遇到了Mongoose 的问题。我有多个模型:

  • 交易
  • 钱包
  • 用户
  • 组织结构

我正在尝试获取交易。

每个事务都包含一个senderWalletId 和一个receiverWalletId,它们有一个referenceWallet

钱包有一个名为type 的字段可以是OrganizationUser,还有一个名为owner 的字段包含对UserOrganization 的引用。我通过指向同一个钱包的type 属性值的引用路径来实现这一点,就像这样。

type: {
    type: String,
    enum: [
      'User',
      'Organization',
      'Moneypot',
    ],
  },
  owner: {
    type: Schema.Types.ObjectId,
    refPath: "type"
  }

现在,我想填充receiverWalletIdsenderWalletIdowner。如果类型是Organization,我想检索namephoneNumberemail。如果类型是User,我想检索firstNamelastNmaeemailphoneNumber。 我通过这段代码部分实现了这一点:

.populate({
      path: 'senderWalletId',
      select: ['owner', 'type'],
      match: { type: { $eq: 'User' } },
      populate: {
        path: 'owner',
        select: ['firstName', 'lastName', 'phoneNumber', 'email']
      }
    })
    .populate({
      path: 'receiverWalletId',
      select: ['owner', 'type'],
      match: { type: { $eq: 'User' } },
      populate: {
        path: 'owner',
        select: ['firstName', 'lastName', 'phoneNumber', 'email']
      }
    })

现在的问题是,当类型等于organization 时,如何让这些群体检索name 而不是firstNamelastName

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-populate


    【解决方案1】:

    我通过将所有属性放入选择数组中找到了一种解决方法,如下所示:

       .populate({
          path: 'senderWalletId',
          select: ['owner', 'type'],
          match: { type: { $eq: 'User' } },
          populate: {
            path: 'owner',
            select: ['name', 'firstName', 'lastName', 'phoneNumber', 'email']
          }
        })
        .populate({
          path: 'receiverWalletId',
          select: ['owner', 'type'],
          match: { type: { $eq: 'User' } },
          populate: {
            path: 'owner',
            select: ['name', 'firstName', 'lastName', 'phoneNumber', 'email']
          }
        })
    

    NoSQL 的强大功能现在开始使用,因为返回的数组包含 firstNamelastName,如果钱包类型是 User,它包含 name,如果它是 organization

    【讨论】:

      猜你喜欢
      • 2015-11-27
      • 2017-03-13
      • 2015-07-13
      • 2016-10-10
      • 2020-11-19
      • 2019-09-16
      • 2020-07-25
      • 2015-07-13
      相关资源
      最近更新 更多