在Azure DocumentDB的select查询中获取重复记录
我需要在Azure DatabaseDB中为下面的JSON数据编写一个Select查询在Azure DocumentDB的select查询中获取重复记录,azure,select,azure-cosmosdb,nosql,Azure,Select,Azure Cosmosdb,Nosql,我需要在Azure DatabaseDB中为下面的JSON数据编写一个Select查询 { "Result": [ { "media": [ { "url": "https://someurl.com", "thumb_url": "https://someurl.com", "id": "f545f874-a9b4-4573-a0b0-b2d50a7994e0", "remo
{
"Result": [
{
"media": [
{
"url": "https://someurl.com",
"thumb_url": "https://someurl.com",
"id": "f545f874-a9b4-4573-a0b0-b2d50a7994e0",
"removed": false,
"size": 133454,
"length": 0,
"type": "IMG",
"avail": true,
"has_thumb": true,
"tagged_chi": [
{
"chi_id": "1069b9ef-1028-45f4-b9a1-a40e0d438f4e",
"tag_x": 262.048,
"tag_y": 157.472,
"tag_by": "d481a522-6e2f-4dc6-8aeb-bc87cf27287d",
"created": 1486723018,
"last_updated": 1486723018
},
{
"chi_id": "7102fc10-62e8-4d0a-9fcf-35645253fcef",
"tag_x": 231.648,
"tag_y": 146.528,
"tag_by": "d481a522-6e2f-4dc6-8aeb-bc87cf27287d",
"created": 1486723018,
"last_updated": 1486723018
}
],
"created": 1486723012,
"last_updated": 1486723017
}
],
"id": "23bcd070-0f64-4914-8bc1-d5e936552295",
"acc_id": "d481a522-6e2f-4dc6-8aeb-bc87cf27287d",
"chi_id": "7102fc10-62e8-4d0a-9fcf-35645253fcef",
"is_note": false,
"title": "",
"when": -2147483648,
"loc_id": null,
"col_id": null,
"comment": null,
"removed": false,
"created": -2147483648,
"last_updated": -2147483648,
"note_type": null,
"note_value": null
},
{
"media": [
{
"url": "https://someurl.com",
"thumb_url": "https://someurl.com",
"id": "7665b921-2790-496b-a70f-30afae43d8c6",
"removed": false,
"size": 6872977,
"length": 0,
"type": "IMG",
"avail": true,
"has_thumb": true,
"tagged_chi": [
{
"chi_id": "1069b9ef-1028-45f4-b9a1-a40e0d438f4e",
"tag_x": 2305.152,
"tag_y": 686.5653,
"tag_by": "d481a522-6e2f-4dc6-8aeb-bc87cf27287d",
"created": 1486976119,
"last_updated": 1486976119
},
{
"chi_id": "7102fc10-62e8-4d0a-9fcf-35645253fcef",
"tag_x": 1070.757,
"tag_y": 1038.741,
"tag_by": "d481a522-6e2f-4dc6-8aeb-bc87cf27287d",
"created": 1486976119,
"last_updated": 1486976119
}
],
"created": 1486976100,
"last_updated": 1486976118
}
],
"id": "58fa3c58-5508-4371-83f4-405332c636e1",
"acc_id": "d481a522-6e2f-4dc6-8aeb-bc87cf27287d",
"chi_id": "7102fc10-62e8-4d0a-9fcf-35645253fcef",
"is_note": false,
"title": "",
"when": -2147483648,
"loc_id": null,
"col_id": null,
"comment": null,
"removed": false,
"created": -2147483648,
"last_updated": -2147483648,
"note_type": null,
"note_value": null
}
],
"Continuation": null
}
我试过下面的方法,但对我不起作用。我希望数据匹配到Media=>taged\u chil=>id
@peter tirrell建议的查询:
string.Format("select c.id, c.acc_id, c.chi_id, c.is_note, c.title, c.loc_id, c.media, t from c JOIN m IN c.media JOIN t IN m.tagged_chi where c.chi_id = '{0}' OR t.chi_id = '{0}'", childId)
@peter tirrell的查询中的微小更改:
string.Format("select c.id, c.acc_id, c.chi_id, c.is_note, c.title, c.loc_id, c.media, t from c JOIN m IN c.media JOIN t IN m.tagged_chi where c.chi_id = '{0}' OR ( t.chi_id != c.chi_id AND t.chi_id = '{0}')", childId)
如果c.child和t.child都具有相同的值,我将获得重复的记录
根据我的经验,您的查询代码将返回null。因为它将返回一个布尔值,指示数组是否包含指定的值。这意味着您的查询代码可以短为
SELECT*FROM TimelineEvent t,其中或数组_包含(t.media,true)
,在您的情况下将返回null
请尝试使用以下代码:
SELECT * FROM TimelineEvent t WHERE ARRAY_CONTAINS ( t.media[0].tagged_chi, {
"id":"0af23202-07f9-40a0-90ba-d2e2f6679331"
})
我们还可以使用UDF来实现自定义代码,有关UDF的更多详细信息,请参阅。您可以使用
JOIN
s来扁平化结构,这也可能有助于查询。比如:
select
c.id,
c.acc_id,
c.chi_id,
c.is_note,
c.title,
c.loc_id,
m,
t
from c JOIN m IN c.media
JOIN t IN m.tagged_chi
where c.chi_id = {0} OR t.id = {0}
然后,您可以选择所需的任何特定数据字段。您可以检查响应头并查看是否返回了延续令牌吗?我得到的是
[]
作为响应。请在第二次出现时使用转义双引号进行尝试,这样您就可以使用..{0}}而不是..{0}}了。
而不是..{id:\'{0}\\\}了。
。我的工作原理是,它对该部分使用JSON解析,因为您用大括号将其包装成一个对象,JSON需要双引号,即使SQL使用双引号或单引号。如果这解决了问题,我将作为答案发布,您可以接受它。它与引号无关,因为其他查询正在工作(没有数组;))很抱歉,但这对我不起作用。让我检查一下上面的文档链接。我已经将代码更新为SELECT*FROM TimelineEvent t,其中ARRAY_包含(t.media[0]。tagged_chi,{“id”:“0af23202-07f9-40a0-90ba-d2e2f6679331”}
。我们可以从,我没有得到你,如果我在媒体中有多个项目该怎么办?这对我很有效,但不是100%如果c.chi_id={0}或t.id={0}
两者都相同,我会得到重复的记录。我在这里找到了一些解决方案(),但我不知道如何使用这些解决方案。是的,对于任何类型的聚合类型功能,我都在客户端代码中实现了它;我将执行上述查询,然后处理结果,在处理端处理重复项或类似内容。找到解决方案后,请在此发布:)