将数组中的第一项投影到新字段(MongoDB聚合)

将数组中的第一项投影到新字段(MongoDB聚合),mongodb,mongoose,aggregation-framework,Mongodb,Mongoose,Aggregation Framework,我正在使用Mongoose聚合(MongoDB 3.2版) 我有一个字段users,它是一个数组。我想将此数组中的第一项$project添加到一个新字段user 我试过了 { $project: { user: '$users[0]', otherField: 1 }}, { $project: { user: '$users.0', otherField: 1 }}, { $project: { user: { $first: '

我正在使用Mongoose聚合(MongoDB 3.2版)

我有一个字段
users
,它是一个数组。我想将此数组中的第一项
$project
添加到一个新字段
user

我试过了

  { $project: {
    user: '$users[0]',
    otherField: 1
  }},

  { $project: {
    user: '$users.0',
    otherField: 1
  }},

  { $project: {
    user: { $first: '$users'},
    otherField: 1
  }},
但两者都不起作用

我怎样才能正确地做呢?谢谢

您可以使用:


启动
Mongo 4.4
,可以使用聚合运算符访问数组的第一个元素:

// { "users": ["Jean", "Paul", "Jack"] }
// { "users": ["Claude"] }
db.collection.aggregate([
  { $project: { user: { $first: "$users" } } }
])
// { "user" : "Jean" }
// { "user" : "Claude" }

如果它是一个对象数组,并且您只想使用单个对象字段,即:

{
 "users": [
    {name: "John", surname: "Smith"},
    {name: "Elon", surname: "Gates"}
   ]
}
您可以使用:

{ $project: { user: { $first: "$users.name" } } 

我们如何直接投影数组元素的键的可能重复?喜欢[{name:'foo'}],我想直接投影名称。@SachinBhandari{$arrayElemAt:[“$users.key.anotherNestedKey”,0]}
{ $project: { user: { $first: "$users.name" } }