所以我的标准看起来像这样:
{
_id: '1234',
name: 'Weight',
states: [{
_id: '5678',
name: 'Heavy',
filters: [{
type: 'field',
operator: '>',
field: 'weightWithBattery',
expression: '100'
}]
}, {
_id: '91011',
name: 'Light',
filters: [{
type: 'field',
operator: '<',
field: 'weightWithBattery',
expression: '101'
}]
}]
}
这只是一个例子,我有很多。 包含这些文档的数据库恰当地命名为标准。
现在我想创建一个名为 persona 的新数据库,其中的文档看起来像这样:
{
name: 'Weekender',
states: [91011]
}
因此,在这种情况下,周刊需要光项。州指的是标准中的州。 我遇到的问题是我对cloudant很新,所以我不知道如何设置它(即使我应该使用一个单独的数据库),我也不知道如何建立一个查询,这样如果我得到 persona 我希望它能够拉入分配给它的所有状态(就像我猜的那样)。
有人能帮助我吗?
答案 0 :(得分:0)
我认为你有几个选择。首先,视图不能跨不同数据库组合数据。因此, NOT 工作的一个选项是具有两个数据库的单个视图。
我认为最直接的方法是使用两个数据库并进行两次调用。第一个调用将检索persona
。第二次调用将使用states
对象上的persona
数组来从criteria
数据库中检索状态。第二个电话看起来像这样:
{
"selector": {
"_id": { "$gt": null },
"states": {
"$elemMatch" : {
"_id": {"$in": ["91011","xyz"] }
}
}
},
"fields": [
"_id",
"_rev",
"states"
]
}
注意:这将返回条件状态的criteria
和所有的_id,如下所示:
{
"_id": "1234",
"_rev": "2-c61f92414e9f016e9fae97a9c1214dc5",
"states": [
{
"_id": "5678",
"name": "Heavy",
"filters": [{
"type": "field",
"operator": ">",
"field": "weightWithBattery",
"expression": "100"
}]
},
{
"_id": "91011",
"name": "Light",
"filters": [{
"type": "field",
"operator": "<",
"field": "weightWithBattery",
"expression": "101"
}]
}
]
}
因此,在代码中,您必须过滤掉那些匹配的状态。解决此问题的一种方法是将状态存储为自己的数据库中的单个文档。然后你的第二个查询将在states
数据库上,看起来像这样:
{
"selector": {
"_id": {
"$gt": null,
"$in": ["91011","xyz"]
}
},
"fields": [
"_id",
"_rev"
]
}
除非在标准文档中保存状态,否则我会倾向于此实现。
最后,有一种方法可以在一个查询中返回criteria
和persona
- 类似于JOIN
中的SQL
。这将涉及向每个文档添加type
字段,创建视图以及使用特殊过滤器查询该视图。如果您有兴趣,可以在这里了解更多信息: