通过索引从数组中获取对象

时间:2018-06-13 16:28:35

标签: mongodb

如何通过索引

获取数组对象

示例:

{ "_id" : 1, "name" : "bob", colors: [ "red", "blue", "green"] }
{ "_id" : 2, "name" : "jim", colors: ["yellow", "black" ] }

我的查询:类似

db.users.find({name: "bob"}, {colors: 2})

结果

{ "_id" : 1, "name" : "bob", colors: "blue" }

2 个答案:

答案 0 :(得分:1)

您可以尝试以下聚合

db.collection.aggregate([
  { "$match": { "name": "bob" }},
  { "$project": {
    "name": 1,
    "color": { "$slice": [ "$colors", 1, 1 ] }
  }},
  { "$unwind": "$color" }
])

以上查询将返回

[
  {
    "_id": 1,
    "color": "blue",
    "name": "bob"
  }
]

答案 1 :(得分:0)

您可以使用$arrayElemAt获取数组中的第n项:

db.users.aggregate([
      {$match: {name: "bob"}},
      {$project: {name: "$name", color: {$arrayElemAt: ['$colors', 1]}}}
])

请注意,索引是从0开始的。