0

我有一个用户文档和一个交易文档。

  • 交易有一个所有者(用户),
  • 用户有一组没有增长限制的交易。

我需要获取用户交易并通过日期范围和付费或非付费等属性对其进行过滤。

由于我的事务架构是无限的,我使用猫鼬虚拟来填充用户的事务,但正如我所见,不可能对虚拟进行 MongoDb 查询,因为它实际上并不在数据库中。

使用模式:

const userSchema = new mongoose.Schema(
  {
    name: {
      type: String,
      required: true,
    },
    email: {
      type: String,
      required: true,
      trim: true,
      unique: true,
    },
    ...
  },
);

userSchema.virtual('transactions', {
  ref: 'Transaction',
  localField: '_id',
  foreignField: 'owner',
});

交易模式:

const transactionSchema = new Schema({
  amount: {
    type: Number,
    required: true,
  },
  ...
  owner: {
    type: Schema.Types.ObjectId,
    ref: 'User',
    required: true,
  },
});

我觉得我在以这种方式建模数据库时犯了一些错误。对于这种情况,哪种方法最好?

4

1 回答 1

0

我认为在这里使用虚拟不是一个好主意。您的事务模型中有用户参考,这就足够了。您可以使用 mongo聚合查询您喜欢的任何内容 您可以对事务集合进行聚合并使用$lookup(如此所述)填充用户或查询它们。

于 2020-06-16T17:37:06.450 回答