在Google数据存储区中查询为mongo中的$ elemMatch

时间:2016-12-19 17:35:50

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

我希望过滤符合所有条件的数组中的元素。

就像我有一个数组

  

试验:   [{ “ORGANIZATIONNAME”: “strge”, “familyName”: “拉朱”},{ “ORGANIZATIONNAME”: “沙”, “familyName”: “沙”}]

我需要在同一个元素中过滤所有条件的查询。我发现它在mongo中使用$ elemMatch但在谷歌数据存储区中没有找到类似的查询。

1 个答案:

答案 0 :(得分:1)

您可以将Cloud Datastore中数组值的相等过滤器视为CONTAINS过滤器。

因此,如果您的GROUP实体具有members属性:

members: [
  { firstName: 'Alice', lastName: 'Smith' }
  { firstName: 'Bob'  , lastName: 'Miller' }
]

你可以跑:

SELECT * FROM Group WHERE
    members.firstName = 'Alice'
    AND members.lastName = 'Smith'
    AND members.firstName = 'Bob'
    AND members.lastName = 'Miller'

它将返回上述结果。

但是,此查询不会检查firstNamelastName值是否出现在相同的member值中。因此,此查询还将返回一个Group实体,其外观如下:

members: [
  { firstName: 'Alice',  lastName: 'Jones' }
  { firstName: 'Bob'  ,  lastName: 'Jones' }
  { firstName: 'Chris',  lastName: 'Miller' }
  { firstName: 'Denise', lastName: 'Smith' }
]

为了防止这种情况,您必须运行第一个查询,然后进行客户端过滤。