小编nor*_*tos的帖子

过滤公式中包含的字段

我想过滤一个集合,包括条件中集合的字段。

- myCollection
|- name (string)
|- field1 (int)
|- field2 (int)
Run Code Online (Sandbox Code Playgroud)

我想获取 field1 > field2 的所有名称。我认为它可以这样工作:

db.collection('myCollection').where('field1','>','field2')
  .get().then(function(snapshot){
    //doing something
  });
Run Code Online (Sandbox Code Playgroud)

但是,它被理解为 field1 > 'field2',而不是 field1 > field2。

我想更进一步,做类似 field1+field2<1000 的事情,但是以下两个查询都没有结果

db.collection('myCollection').where('field1'+'field2','<',1000)
  .get().then(function(snapshot){
    //doing something
  });

db.collection('myCollection').where('field1+field2','<',1000)
  .get().then(function(snapshot){
    //doing something
  });
Run Code Online (Sandbox Code Playgroud)

谢谢

javascript filtering google-cloud-firestore

3
推荐指数
1
解决办法
699
查看次数

半连接表达式必须是逻辑AND的一部分

我有一个表(我们可以称之为"A")与一些字段(模型:字符串,年龄:整数,代码1:整数,代码2:整数,代码3:整数)和另一个表(它可以是"代码")与分类代码(代码:整数,代码类型:字符串,描述:字符串).

该字段代码类型用于分组代码.例如,200到300之间的代码是棕色的.每个项目最多可以有3个代码.

现在,我只想获得简单,简单的查询:

SELECT model,age FROM dataset.A
WHERE code1 IN (SELECT code FROM dataset.codes WHERE codetype='brown')
Run Code Online (Sandbox Code Playgroud)

它有效,除了事实,还有另外两个.所以,如果我这样做:

SELECT model,age FROM dataset.A
WHERE code1 IN (SELECT code FROM dataset.codes WHERE codetype='brown')
OR code2 IN (SELECT code FROM dataset.codes WHERE codetype='brown')
OR code3 IN (SELECT code FROM dataset.codes WHERE codetype='brown')
Run Code Online (Sandbox Code Playgroud)

它不起作用,我收到此错误消息:

Error: (xx:yy): Semijoin expression (i.e. "x IN (SELECT ...)") must be a part of logical AND.
Run Code Online (Sandbox Code Playgroud)

我相信谷歌应该有办法做到这一点.

顺便说一句,我正在开发的项目不是"A"和"代码".我真的需要一个解决方案.谢谢你的帮助.

google-bigquery

2
推荐指数
1
解决办法
1076
查看次数