【发布时间】:2017-06-26 20:09:07
【问题描述】:
以下 mongodb 查询未返回文档。查询有什么问题?我想指定$where 来匹配数组中的一个元素
[EDIT] 以上问题是我的场景的简化版本。我正在使用 spring 数据 mongodb 存储库。我想使用 @Query 注释指定查询。希望$where 部分是简单的比较,而不是完整的 javascript 函数。像
@Query ( value=" { flag: true, $where: \"this.versions.version == this.defaultVersion \"}", fields = "{'versions' : 1}" )
Foo getDefaultVersion();
如果$where 的语法不正确,请提出替代方案。
db.foo.find({
flag: true,
$where: "this.versions.version == this.defaultVersion " },
{ 'versions' : 1}
});
收藏:
{
flag: true,
defaultVersion: "1.0",
versions: [
{
version: "1.0",
tags: ["abc", "def"]
},
{
version: "1.1",
tags: ["abc", "def"]
}
]
}
我想从具有匹配版本作为 defaultVersion 属性的版本数组中获取“版本”子文档。
[EDIT2]我能够使用 $elemMatch 缩小范围
db.foo.find({
flag: true,
versions: { $elemMatch : { version: '1.0' } }
},
{ 'versions' : 1}
});
在上面的硬编码'1.0' 的地方,我想指定文档的defaultVersion。不知道如何实现?
【问题讨论】:
-
你的版本是数组,this.versions.version会给你未定义的,如果你只想匹配第一个位置,尝试使用this.versions[0].version @Jack
-
我不知道在版本上使用索引的前期位置。我希望查询遍历所有版本并将版本与 defaultVersion 匹配。不知道如何为此编写查询。有什么建议吗?
标签: mongodb mongodb-query aggregation-framework