如何使用 JavaScript 在 ReThinkDB 中的 ReQL 中的数组上应用过滤器
Posted
技术标签:
【中文标题】如何使用 JavaScript 在 ReThinkDB 中的 ReQL 中的数组上应用过滤器【英文标题】:How to apply filter on array in ReQL in ReThinkDB using JavaScript 【发布时间】:2015-05-28 11:37:36 【问题描述】:在下面的 JSON 中,我想选择销售额 > 12500 的记录。如何在 ReThinkDB 和 ReQL 中做到这一点?
JSON 是:
"address":
"address_line1": "Address Line 1" ,
"address_line2": "Address Line 2" ,
"city": "Kochin" ,
"country": "India" ,
"state": "Kerala"
,
"id": "bbe6a9c4-ad9d-4a69-9743-d5aff115b280" ,
"name": "Dealer 1" ,
"products": [
"product_name": "Stabilizer" ,
"sales": 12000
,
"product_name": "Induction Cooker" ,
"sales": 14000
]
,
"address":
"address_line1": "Address Line 1" ,
"address_line2": "Address Line 2" ,
"city": "Kochin" ,
"country": "India" ,
"state": "Kerala"
,
"id": "f033a4c2-959c-4e2f-a07d-d1a688100ed7" ,
"name": "Dealer 2" ,
"products": [
"product_name": "Stabilizer" ,
"sales": 13000
,
"product_name": "Induction Cooker" ,
"sales": 11000
]
【问题讨论】:
你想要什么作为这个输出?product_name: "Stabilizer", sales: 13000
之类的产品列表?还是包含至少一种产品的销售量足够高的所有文档的完整文档?
我想要任何产品销售额超过 12,500 的所有文档的完整文档。这可能吗?
好吧,这是有道理的。我在下面添加了我的答案。希望有效。
【参考方案1】:
要获取任何产品的至少一个销售额超过 12,500 的所有文档,您可以在 ReQL 中使用以下过滤器:
r.table('t')
.filter(r.row('products').contains(function(product)
return product('sales').gt(12500);
))
这利用了您可以将函数传递给contains
的事实。如果fun
为array
中的至少一个元素返回true
,则array.contains(fun)
返回true
。
您可以在http://rethinkdb.com/api/javascript/contains/找到更多示例
【讨论】:
以上是关于如何使用 JavaScript 在 ReThinkDB 中的 ReQL 中的数组上应用过滤器的主要内容,如果未能解决你的问题,请参考以下文章
在 Rails 中如何在使用 javascript_include_tag 之前检查 javascript 文件是不是存在