【发布时间】:2014-08-13 10:55:53
【问题描述】:
我有一个存储在 Mongo 中的任务列表,如下所示
{
"name": "task1",
"requiredOS": [
{
"name": "linux",
"version": [
"6.0"
]
},
{
"name": "windows",
"version": [
"2008",
"2008R2"
]
}
],
"requiredSW": [
{
"name": "MySQL",
"version": [
"1.0"
]
}
]
}
我的目的是按操作系统和软件过滤任务,例如用户给我下面的过滤条件
{
"keyword": [
{
"OS": [
{
"name": "linux",
"version": [
"6.0"
]
},
{
"name": "windows",
"version": [
"2008"
]
}
]
},
{
"SW": [ ]
}
]
}
我需要通过搜索“requiredOS”和“requiredSW”字段来过滤掉所有可以在windows2008和Linux 6.0上运行的任务。如您所见,搜索条件是一个数组(“OS”部分)。使用数组作为搜索条件时我遇到了麻烦。我希望查询返回一个满足条件的任务列表。
一个具有挑战性的事情是我需要使用 @Query 将查询集成到 spring-data 中。所以查询必须参数化
谁能帮帮我?
我尝试了一个查询,但没有返回任何内容。我的目的是使用 $all 将两个条件组合在一起,然后使用 $elemMatch 搜索“requiredOS”字段
{"requiredOS":{"$elemMatch":{"$all":[{"name":"linux","version":"5.0"},{"name":"windows","version":"2008"}]}}}
【问题讨论】:
-
我认为您没有清楚地说明您期望匹配的是什么,甚至没有说明您期望的结果。您的问题可以详细说明您希望您的“测试”查询返回某个结果,并且还显示可以返回该结果的一些数据。目前这些条件都不成立。
-
很抱歉没有说明清除。目前我在Mongo中存储了一些“Task”,json结构如第一段代码所示。我想匹配“requiredOS”和“requiredSW”数组字段。搜索条件就像第 2 节中的 json。它也是任何数组(“OS”部分)。所以我不是很清楚如何使用数组作为搜索条件。我现在说清楚了吗?
-
并非如此。正如我所说,您的“样本”可能与您的条件不符,因此人们很难理解。我可以猜测您试图匹配空数组的“条件”。但实际上你的整个意图并不清楚。使用问题上的“编辑”链接并在对有兴趣提供帮助的人发表评论之前进行澄清。这就是 cmets 的用途,“问题”是您陈述意图的地方,而不是 cmets。
-
当他说他的
purpose is to filter the task by OS and Software时,我认为他的问题已经说得很清楚了。很明显,他想findrequiredOS和requiredSW数组中查询中提到的所有指定值的所有文档。 -
@NeilLunn 感谢提醒。我已经更新了我的问题。
标签: spring mongodb spring-data