Google Cloud灵活查询

时间:2017-04-11 08:49:31

标签: ruby google-app-engine google-cloud-datastore

我尝试创建一个检索标签=“red”OR tag =“blue”

的实体的查询

我不能这样做:

colors = ["red", "yellow"]
query.where("tag", "=", colors[0]).where("tag", "=", colors[1])

有没有办法用灵活的“OR”过滤器制作它?

我甚至考虑像

这样的字符串查询
query.query_string = "SELECT * FROM Item WHERE tag = @1 OR tag = @2"

但是documentation说:

  数据存储区尚不支持

!=和OR运算符   GQL

2 个答案:

答案 0 :(得分:0)

我不确定ruby client使用footer{ padding: 20px; color: #ffffff; background-color: #333; text-align: center; width: 100%; position: absolute; left: 0; bottom: 0; overflow: hidden; } GRPC API,但每个API都不支持REST API操作。

所以我认为OR操作是不可能的。

答案 1 :(得分:0)

Ruby Google Cloud不支持

!=和OR运算符。您可以通过查询每个OR语句的Cloud Datastore并连接结果来模拟OR运算符。与以下代码类似,但不完全是因为此代码可以包含重复项

datastore = Google::Cloud::Datastore.new

red_query = Google::Cloud::Datastore::Query.new
red_query.kind("messages").where("tags", "=", "red")
items = datastore.run red_query

yellow_query = Google::Cloud::Datastore::Query.new
yellow_query.kind("messages").where("tags", "=", "yellow")

items.concat datastore.run(yellow_query)

items.each do |item|
   puts "Tags: #{item['tags']}"
end

代码:

query.where("tag", "=", colors[0]).where("tag", "=", colors[1])

可能被误解为OR操作,但它是一个AND操作。 Source

正如nshmura所指出的,API并不支持AND运算符以外的运算符。