gpt4 book ai didi

mongodb - Mongoose 如何过滤填充字段

转载 作者:行者123 更新时间:2023-12-04 13:44:28 24 4
gpt4 key购买 nike

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

订单 (_id, item, user_id)
用户(_id、电子邮件、电话)

const orders = await Order.find({}).populate({path: 'user', select: 'phone'})

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

谢谢

最佳答案

更简单的解决方案

首先从具有给定电话号码的用户集合中找到 UserInstance。

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

然后从该用户的订单集合中找到 OrderInstances。
db.order.find({user_id: userInstance._id})

为什么不使用填充

Populate 是 Mongoose 库方法,而不是本地 MongoDb 方法。要使用 Populate,您必须定义您的模式
因此。
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' }
});

如果您像这样定义模型,然后使用 populate 来查找用户订单。然后发生以下步骤:
  • 查找所有订单并填充用户。

    db.order.find().populate('user_id')
  • 使用电话号码过滤用户的订单。

  • 这确实是低效的,因为它每次都获取所有订单而不使用数据库高效查询。
    mongoDB 原生的 $lookup 也是如此。

    关于mongodb - Mongoose 如何过滤填充字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51443746/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com