我正在使用jsdata为Angular 1.5 web应用程序创建本地缓存。我用相应的关系对我的数据进行建模,一切都很好。我正在努力处理一个查询,我甚至不确定这是否适用于js-data:
假设我有一个具有ID和名称的标签集合
[
{
"id": 1,
"name": "Tag 1"
},
{
"id": 2,
"name": "Tag 2"
}
,
{
"id": 3,
"name": "Tag 3"
}
]和一些已经分配了标签的帖子:
[ {
"id": 1,
"name": "Post with tags 1 and 2",
"tags": [1, 2]
},
{
"id": 2,
"name": "Post with tags 2 and 3",
"tags": [2,3]
},
{
"id": 3,
"name": "Post with tag 3",
"tags": [3]
}
]然后我定义了一个标记和Post数据存储,并在Post上设置了一个hasMany关系:
relations: {
hasMany: {
tag: {
localField: 'embedded_tags',
localKeys: 'tags'
}
}当我查询帖子时,我看到我的标签出现在embedded_tags中,所以没问题。我现在想将我的帖子过滤到一组特定的标签:比方说,我只想看到标签为2和3的帖子,即帖子2。
显然,这不起作用:
var resultISect = postDS.filter({
where: {
'tags': {
'iSectNotEmpty': [1, 2]
}
}
})这也没有(当然还抛出了一个重复的键警告):
var resultAnd = postDS.filter({
where: {
'tags': {
'contains': 3,
'contains': 2
}
}
})在MongoDB / Mongoose中有一个关键字$all,它就是这样做的。在jsData中有没有像这样的过滤方法,或者这是不是太多的数据库任务,应该在后端完成-我想避免这样的情况,因为这或多或少就是拥有本地缓存副本的全部意义,对吧?
Plunkr:http://plnkr.co/edit/M44V8js0BtZaK6Xq9CYt?p=preview
发布于 2017-05-19 23:09:51
我给js-data _utils2.default添加了一个'matchAll‘函数。这对现在来说是有效的,也许对某些人有帮助。
将此函数添加到intersection- function旁边:
// check if array contains all elements queried
function matchAll(arr, elements) {
if (!arr || !elements) {
return true;
}
for (var i = 0, length = elements.length; i < length; i++) {
if (contains(arr, elements[i])) {
continue;
} else {
return false;
}
}
return true;
}将此函数与其他函数一起公开:
exports.default = {
...
guid: guid,
intersection: intersection,
matchAll: matchAll,
isArray: isArray,
isBlacklisted: isBlacklisted,
...
}并让它对新的关键字做出反应:
...
} else if (op === 'isectEmpty') {
expr = !_utils2.default.intersection(val || [], term || []).length;
} else if (op === 'isectNotEmpty') {
expr = _utils2.default.intersection(val || [], term || []).length;
} else if (op === 'matchAll') {
expr = _utils2.default.matchAll(val || [], term || []);
} else if (op === 'in') {
...发布于 2017-05-29 23:14:29
“‘where”可以是一个数组,这应该是可行的:
where: [
{
tags: {
contains: 3
}
},
'and'
{
tags: {
contains: 2
}
}
]取自:https://github.com/js-data/js-data/blob/c3fcde1abab910cdf4d39e3fbc42699a3b27c1da/test/unit/query/filter.test.js#L243 (发现所有过滤器特性的好地方,顺便说一下)
https://stackoverflow.com/questions/44001572
复制相似问题