DocumentDb - 查询嵌套文档和根级别

DocumentDb - query on nested document and root level

提醒我 |编辑 |删除 |更改类型 题 你不能自己投票 post 0 嗨!

假设我有以下方式的文档:

{
  id: 123,
  tags: [ { name: "something" } ]
}

并且我想查询所有包含名称="searched" 或 ID=9000 的标签的文档。我在操场上测试过(https://www.documentdb.com/sql/demo)是这样的:

SELECT food.id, food.description, food.tags
FROM food
JOIN tag IN food.tags
WHERE food.id = "09052" or tag.name="blueberries"

但后来我得到了一堆重复的记录,每个来自食物的文档都是该文档中标签数量的倍数。

在对嵌套集合和根属性进行过滤时如何获得不同的结果?

ARRAY_CONTAINS 内置函数可能正是您所需要的。有关详细信息,请参阅 https://msdn.microsoft.com/library/azure/dn782250.aspx#bk_array_functions,即类似这样的内容:

SELECT food.id, food.description, food.tags
FROM food
WHERE food.id = "09052" or ARRAY_CONTAINS(food.tags, { "name": "blueberries" })

您可以在 Query Playground here.

上测试这个查询

请注意,该函数 使用索引,因此理想情况下,您应该在查询中有另一个过滤器时使用它。否则,执行此操作的唯一方法是使用您之前的查询,然后在客户端执行 "distinct"。