【问题标题】:How to query on a Mongodb document and on a reference object at a time如何一次查询 Mongodb 文档和引用对象
【发布时间】:2022-01-11 13:58:50
【问题描述】:

我正在尝试创建一个过滤器来管理订单(卖家)

订单由“价格”、“国家/地区”、“产品类型”组成, 以及卖家客户信息

order: {
 _id:""
 price: $750
 country:"Italy"
 customer: objectID
 Seller: objectID
 productType: "smartphone"

}
 
 
customer: {
  _id:""
  location:"Italy",
  paymentType:"paypal"
  languages:"it"

}

Seller: {
  _id:"278"
  location:"UK"
  languages:"en"

}

假设卖家(_id:278)想要找到他的所有订单:

  order with a minimum price of $500 and a maximum price of $800
  and order in the country "italy" or "belgium"
  and order with customers who have paid with "paypal" or "stripe"
  and order with customer who speaks English or Italian

所以我提出了这个要求:

  Order.find({ $and:[
    seller: 278,
    price: {$gte: 500, $lte: 800},
    country: { $or:["Italy","belgium"] },
    customer: { paymentType: { $or:["paypal","stripe"] },
               languages:{ $or:["en","it"] }
]})

当然我有一个错误:

 " Cast to ObjectId failed for value " paymentType: { $or:["paypal","stripe"]
at path "customer " for model Order"

我不知道该放什么,因为我没有针对任何特定客户我不需要针对我不了解的客户 ID

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query


    【解决方案1】:

    使用$in 运算符。你不需要$and

    Order.find({ 
        seller: 278,
        price: {$gte: 500, $lte: 800},
        country: { $in: ["Italy","belgium"] },
        "customer.paymentType": { $in: ["paypal","stripe"] },
        languages:{ $in: ["en","it"] }
    })
    

    【讨论】:

    • 即使有参考对象也能工作?
    • 请提供正确有效的输入数据,您会得到更好的答案。
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多