我有一组JSON对象,表示用户想要接收通知的销售,并且数组中的每个JSON对象都有一个itemName和一个maxPriceDesired字段。
我有一个单独的销售集合来通知用户,每个销售都有一个itemName,price和location字段。
我想要的是返回每个销售对象,当且仅当销售itemName位于用户要接收通知的项目列表中且销售价格小于或等于maxDesiredPrice时。我无法弄清楚如何查询,以便我得到这个。例如,假设用户为了自己的兴趣而拥有此JSON数组:
[
{ itemName: MacBook Pro, maxDesiredPrice: 1000.00},
{ itemName: iPhone 6, maxDesiredPrice: 800 }
]
销售系列
[
{ itemName: MacBook Pro, price: 1250.00 },
{ itemName: iPhone 6, price: 700.00 }
]
然后我想在查询中仅返回iPhone 6促销,因为用户已表示对该项目感兴趣(匹配itemName)且其价格低于最高期望价格。
答案 0 :(得分:1)
因此,已经从"用户"进入user
变量,其中的项目以" interest_in"表示。属性:
{
"interested_in": [
{ "itemName": "MacBook Pro", "maxDesiredPrice": 1000.00 },
{ "itemName": "iPhone 6", "maxDesiredPrice": 800 }
]
}
然后,您将使用$or
查询表达式中的信息进行一些修改,如下所示:
var interested = user.interested_in.map(function(item) {
item.price = { "$lte": item.maxDesiredPrice };
delete item.maxDesiredPrice;
return item;
});
db.sales.find({ "$or": interested })
或者基本上是一些将键操作到所需形式的过程,以您实际使用的任何语言发出查询。原则保持不变。