如何使用计算值作为localField属性填充虚拟属性?

时间:2019-01-28 22:43:52

标签: mongodb mongoose mongoose-schema mongoose-populate

我有一个文档,其中包含此模式中的uid和角色对数组。

TestSchema = new mongoose.Schema({
  users: {
    type: [
      {
        uid: { type: String },
        role: { type: Number }
      }
    ]
  }
});

对于架构,我现在想指定一个虚拟属性owner,该属性填充了另一个集合中的文档。我想用一个具有与从usersrole: 1的数组元素的uid相同的uid的文档来填充它(总是有一个role: 1的数组元素)。将localField本身设置为虚拟属性,并尝试通过这样的属性getter函数进行计算

XSchema.virtual("owner", {
  ref: "User",
  localField: "owner", // ???
  foreignField: "uid",
  justOne: true
}).get(function() {
  return this.user.find(user => {
    return user.role ===1;
  });
});

然后打电话给

X.find().populate("owner");

不起作用,因为在填充之前未应用getter函数。 如何在此处将来自文档的计算值用作localField值? 除了多次查询,我还有什么其他选择?

0 个答案:

没有答案