我在Mongodb数据库中有一个非常简单的测试集合。该集合中的一项如下所示:
_id: ObjectId()
name: test
data: an array of 6 elements
例如,我想做的只是返回数组“ data”的2个元素。我该怎么做?
我在这里找到了类似的问题,但找不到答案。
答案 0 :(得分:0)
样本数据:
{
"_id" : ObjectId("5bd9f112f255307d51f3257a"),
"name" : "foo",
"data" : [ 1, 2, 4, 5, 6 ]
}
汇总:选中here
db.getCollection('tests').aggregate([
{$match: {name: "foo"}},
{$unwind: "$data"},
{$match: {data: {$gt: 4}}},
{$group: {
_id: "$_id",
name: {$first: "$name"},
data: {$push: "$data"}
}}
]);
输出:
{
"_id" : ObjectId("5bd9f112f255307d51f3257a"),
"name" : "foo",
"data" : [ 5, 6 ]
}
步骤:
$match
首先过滤掉一些不需要的文档。$unwind
到对象的数组。$match
再次检查未转换为独立对象的数组元素上的条件。$group
再次创建相同的单个文档,但我们现在将推送这些过滤后的数组元素,并将其再次作为数组。