在Mongo中使用聚合框架,
如何在 Mongo<中获得相同的结果? 3.2 ,如 Mongo 3.2 ,操作 $ arrayElemAt ?
Mongo 3.2中的示例
集合
{ "_id" : 1, "name" : "dave123", favorites: [ "chocolate", "cake", "butter", "apples" ] }
查询
db.users.aggregate([
{
$project:
{
name: 1,
first: { $arrayElemAt: [ "$favorites", 0 ] },
last: { $arrayElemAt: [ "$favorites", -1 ] }
}
}
])
工作正常
但是,我被迫使用Mongo 3.0,所以我不能使用这个操作符,这对我想做的事情来说是理想的
有没有办法通过索引来访问数组的元素...
Mongo 3.0
集合
{ "_id" : 1, "name" : "dave123", favorites: [ "chocolate", "cake", "butter", "apples" ] }
查询
db.users.aggregate([
{
$project:
{
name: 1,
first: { "$favorites.0" },
last: { "$favorites.1" }
}
}
])
我试过但它不起作用,它给了我一个空数组。
但是,当它们是属性而不是索引时,它能够检索值
任何帮助都会非常感激。
由于
答案 0 :(得分:7)
您需要$unwind
,$group
并使用$first
和$last
运算符,如下所示:
db.collection.aggregate([
{ "$unwind": "$favorites" },
{ "$group": {
"_id": "$_id",
"first": { "$first": "$favorites" },
"last": { "$last": "$favorites" }
}}
])
如果$unwind
费用昂贵,还有两个不同的查询
var first = db.collection.find({}, {"favorites": { $slice: 1}})
var last = db.collection.find({}, {"favorites": { $slice: -1}})