我在玩https://www.documentdb.com/sql/demo,这使我可以查询类似于以下内容的示例文档:
{
"id": "19015",
"description": "Snacks, granola bars, hard, plain",
"tags": [
{
"name": "snacks"
}
],
"version": 1,
"isFromSurvey": false,
"foodGroup": "Snacks",
"servings": [
{
"amount": 1,
"description": "bar",
"weightInGrams": 21
}
]
}
我很困惑ARRAY_CONTAINS()
。该查询返回结果:
SELECT root
FROM root
WHERE ARRAY_CONTAINS(root.tags, { "name": "snacks" })
但是,此查询不会:
SELECT root
FROM root
WHERE ARRAY_CONTAINS(root.servings, { "description": "bar" })
是什么赋予了?
如果这是C#,我将如何编写查询来说明我要实现的目标:
var filteredDocs = docs.Where(d => d.Servings != null &&
d.Servings.Length > 0 &&
d.Servings.Any(s => s.Description == "bar"));
它出现在第一示例查询root.tags
因为作品{ "name": "snacks" }
是 整个
中对象root.tags
阵列,而在第二个查询,{ "description": "bar" }
仅 一个字段
中的root.servings
对象。
如何修改第二个查询,root.servings
使其仅在知道服务的情况下起作用description
?
编辑:ARRAY_CONTAINS现在支持部分匹配,如吉姆·斯科特(Jim Scott)在下面指出的那样,我认为这是一个比这个公认的更好的答案。
您的servings
数组只有一个条目{"amount": 1, "description": "bar", "weightInGrams": 21}
。
这可以在您的示例中一次食用:
SELECT root
FROM root
WHERE root.servings[0].description = "bar"
但这听起来并不是您要的。因此,假设您具有以下条件:
{
...
"servings": [
{"description": "baz", ....},
{"description": "bar", ....},
{"description": "bejeweled", ....}
],
...
}
并且您想查找其中一份的描述为“ bar”的文档,那么您可以使用以下UDF:
function(servings, description) {
var s, _i, _len;
for (_i = 0, _len = servings.length; _i < _len; _i++) {
s = servings[_i];
if (s.description === description) {
return true;
}
}
return false;
}
使用此查询:
SELECT * FROM c WHERE udf.findServingsByDescription(c.servings, "bar")
问题内容: 是否有一种方便的方法在配置单元中使用ARRAY_CONTAINS函数来搜索数组列中的多个条目而不是一个?因此,而不是: 我想写: 完整的问题是,在运行脚本时,我需要从命令行参数中动态读取并动态读取它们,而我通常不知道要使用多少个值作为条件。所以,你能想到的是一个逗号分隔的列表(或阵列)包含值,,,我想写 提前致谢! 问题答案: 有一个UDF在这里,可以让你把两个数组的交集。假设您的价值
问题内容: 我正在尝试从java.util.Date格式化日期。我需要这种格式: 。 如何从标准日期格式正确转换 ? 不幸的是,这段代码没有返回值。 问题答案: 只需将z转到upperCase 结果:2016-06-10T13:53:22 +0200
问题内容: 我正在Oracle DB中插入一些记录。为了唯一,我正在使用SequenceGenerator。下面是代码: XxspPoInLineLocqty与XxspPoInLine具有@ManyToOne关系。当我坚持XxspPoInLine实体时,我收到以下错误: 我查看了stackoverflow,并为此找到了一些解决方案: 1.使用allocationSize = 1 因为我有5000+
问题内容: 我有2个需要绑定在一起的文件:hibernate.cfg.xml和hibernate属性。如何使用PropertyPlaceholderConfigurer将它们彼此指向?是否可以不将它们声明为bean?(我是Spring的初学者)。每个答案表示赞赏。 提前致谢。 纳扎尔 hibernate.cfg.xml: hibernate.properties: 问题答案: 是的,您可以访问两个
问题内容: 当其中的所有方法都是具体的时,有人在声明类抽象时有一些实际的编程情况吗? 问题答案: 好吧,您可能正在使用模板方法模式,其中存在多个都具有默认实现的覆盖点,但是组合的默认实现本身不合法-任何功能实现都必须是子类。 (是的,我不喜欢模板方法模式;)
问题内容: 我有一组服务器,每个服务器都装有一堆可以压缩的文件。服务器均具有不同数量的核心。如何编写bash脚本为每个核心启动gzip,并确保gzip没有压缩相同的文件? 问题答案: 如果您使用的是Linux,则可以使用GNU的xargs启动与内核一样多的进程。 find -print0 / xargs -0保护文件名中的空格 xargs -n 1表示每个文件一个gzip进程 xargs -P指定