我的xyz_services
集合有三个文档:
xyz_services
{
service: "XYZ for under 1,500 sqft properties",
minSize: 0,
maxSize: 1500,
price: 100,
_id: "9LnnnJx3itBts8Bgp"
}
{
service: "XYZ for 1,501 - 2,000 sqft properties",
minSize: 1501,
maxSize: 2000,
price: 125,
_id: "kmMnxuBfB2Qimdwkc"
}
{
service: "XYZ for 2,001 - 3,000 sqft properties",
minSize: 2001,
maxSize: 3000,
price: 150,
_id: "jE8cPwRwkPmvRqZdB"
}
我从表单提交中获得一个整数size
。
说var size = 2500
我需要遍历此xyz_services
集合中的三个单独文档中的每一个,并查看哪个文档匹配
minSize <= size <= maxSize
找到匹配后,我需要从文档中获取price
值。
(在这种情况下,尺寸= 2500,价格为150)
我完全不确定如何写这个 - 还有另外一个关于循环文档的问题,但我担心这是我的头脑。
任何人都可以帮我解决这些问题吗?
答案 0 :(得分:3)
您可以使用以下代码段
db.collection.findOne({&#34; minSize&#34;:{$ lte:2500},&#34; maxSize&#34;:{$ gte:2500}},{_ id:0,price: 1})
答案 1 :(得分:1)
对于此特定,您不需要循环遍历集合中的所有文档。
您可以写下一个简单的查询,只返回满足此条件的所有文档的价格minSize <= size <= maxSize
查询将是
db.xyz_services.find({"minSize" : {$lte : 2500}, "maxSize" : {$gte : 2500}}, {_id : 0, price : 1})
以上查询将仅返回满足条件的所有文档的价格。如果您正在使用某些驱动程序(如java或其他驱动程序),则可以动态传递size(在这种情况下为2500)的值。
答案 2 :(得分:0)
仅供参考,这是我用来返回&#34; 150&#34;
的值的完整代码db.xyz_services.findOne({"minSize" : {$lte : 2500}, "maxSize" : {$gte : 2500}}, {_id : 0, price : 1}).price