【发布时间】:2017-01-06 02:52:13
【问题描述】:
我想在 Mongo DB 的一个数组中过滤一个数组。例如,给定这两个文档:
{
"_id" : 1.0,
"pages" : [
{
"texts" : [
{
"text" : "foo"
},
{
"text" : "foo1"
},
{
"text" : "foo2"
}
]
}
]
}
{
"_id" : 2.0,
"pages" : [
{
"texts" : [
{
"text" : "bar"
},
{
"text" : "bar1"
},
{
"text" : "bar2"
}
]
}
]
}
我想要一个查询来查找 _id 和给定文本作为输入的文本,例如,对于关键字“bar1”,输出将是这样的:
{
"_id" : 2.0,
"text": "bar1"
}
如果我要查找的文本位于文档顶层的单个数组中,我可以做到这一点,但我不能用另一个数组中的数组来做到这一点。
到目前为止,我的查询如下所示:
db.collection.aggregate([{$match:{"pages.texts.text":"bar1"}},
{ $project:
{ text:
{ $filter:
{ input: '$pages.texts.text',
as: 'text',
cond: { $eq: [ "$$text" , "bar1"]}
}
},
_id:1
}
}
])
输出如下:
{
"_id" : 2.0,
"text" : [
]
}
它显示正确的_id,但没有文本。
如果我在过滤器中将运算符 $eq 更改为 $ne,则输出为:
{
"_id" : 2.0,
"text" : [
[
"bar",
"bar1",
"bar2"
]
]
}
似乎 text 是一个数组,我无法直接将关键字与该字段进行比较。我尝试了不同的方法来解决这个问题,但到目前为止没有运气。
任何帮助将不胜感激。
谢谢!
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework