猫鼬如何过滤填充字段

时间:2018-07-20 13:34:47

标签: mongodb mongoose mongodb-query mongoose-populate

我有订单和用户,我想通过Mongoose Populate或其他方式按用户电话号码查找订单?

订单(_id,商品,user_id) 用户(_id,电子邮件,电话)

常量订单=等待Order.find({})。populate({路径:'用户',选择:'电话'})

我想要这样的东西,其中(user.phone ='xxxxxx')我无法弄清楚。

谢谢

1 个答案:

答案 0 :(得分:0)

更简单的解决方案

首先从User Collection中找到具有给定电话号码的UserInstance。

db.user.find({phone: PhoneNumber})

然后从“订单集合”中找到该用户的“订单实例”。

db.order.find({user_id: userInstance._id})

为什么不使用填充

填充是Mongoose库的方法,而不是本机的MongoDb方法。要使用“填充”,您必须定义模式 相应地。

var user = Schema({
    _id: Schema.Types.ObjectId,
    email: String,
    phone: Number,
});

var order = Schema({
    _id: Schema.Types.ObjectId,
    item: String,
    user_id: { type: Schema.Types.ObjectId, ref: 'user' }
});

如果您定义这样的模型,然后使用填充来查找用户订单。然后执行以下步骤:

  1. 查找所有订单并向用户填充。

    db.order.find()。populate('user_id')

  2. 使用电话号码过滤用户的订单。

这确实是低效的,因为它每次都获取所有订单并且不使用数据库有效查询。 $ lookup也是mongoDB固有的情况。