[英]Get index of an element mongodb aggregation
這是我的收藏
{ "_id" : ObjectId("5c225f9a66d39d55c036fa66"), "name" : "Sherlock", "mobile" : "999999", "adress" : [ { "street" : "221b baker street", "city" : "london" }, { "street" : "ben street", "city" : "london" } ], "tags" : [ "Detective", "Magician", "Avenger" ] }
現在我想獲取地址數組中的第一個或第二個值。 為此,我正在使用此命令。
> db.agents.findOne({"name" : "Sherlock"},{"adress" : 1})
但不是給出單個結果,而是給出整個數組,如
{ "_id" : ObjectId("5c225f9a66d39d55c036fa66"), "adress" : [ { "street" : "221b baker street", "city" : "london" }, { "street" : "ben street", "city" : "london" } ] }
它可以通過比較數組值來完成
db.agents.find({"adress.street": "ben street"}, {_id: 0, 'adress.$': 1});
但我不想僅僅為了打印數組索引而進行比較。 我怎樣才能得到單一的結果? 任何幫助表示贊賞..
您可以使用includeArrayIndex
$unwind
來獲取地址數組的索引
db.t11.aggregate([
{$match : {"adress.street" : "ben street"}},
{$unwind : {path : "$adress", includeArrayIndex : "idx"}},
{$match : {"adress.street" : "ben street"}}
]).pretty()
您可以添加$project
來過濾不需要的字段
結果
> db.t11.aggregate([{$match : {"adress.street" : "ben street"}},{$unwind : {path : "$adress", includeArrayIndex : "idx"}},{$match : {"adress.street" : "ben street"}}]).pretty()
{
"_id" : ObjectId("5c225f9a66d39d55c036fa66"),
"name" : "Sherlock",
"mobile" : "999999",
"adress" : {
"street" : "ben street",
"city" : "london"
},
"tags" : [
"Detective",
"Magician",
"Avenger"
],
"idx" : NumberLong(1)
}
>
您可以使用$arrayElemAt
從數組中獲取特定元素
db.collection.aggregate([
{ $addFields: { "$arrayElemAt": ["$adress", 0] }} //index
])
如果你想獲得切片元素,那么你可以使用$slice
投影
db.collection.find({}, { adress: { $slice: [2, 1] }}) // 2 index and 1 number of element
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.