项目数组中的第一个项目到新字段(MongoDB聚合)



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

我有一个字段users,它是一个数组。我想把这个数组中的第一项$project放到一个新的字段user中。

I tried

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

但是都不行

我怎样才能做得正确?由于

更新:

从v4.4开始,有一个专用的操作符$first:

{ $project: {
    user: { $first: "$users" },
    otherField: 1
}},

的语法糖

原始答:

可以使用arrayElemAt:

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

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

{
 "users": [
    {name: "John", surname: "Smith"},
    {name: "Elon", surname: "Gates"}
   ]
}

可以使用:

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

编辑(排除@haytham评论后的大小写)

为了从数组中嵌套的文档中排除单个字段,您必须做2个投影:

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

返回整个第一个对象,然后排除您不想要的字段,即:

{ $project: { "user.name" : 0 } 

Mongo 4.4开始,聚合运算符$first可用于访问数组的第一个元素:

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

相关内容

  • 没有找到相关文章

最新更新