programing

어레이의 첫 번째 항목을 새 필드에 투영(MongoDB 집약)

goodsources 2023. 3. 12. 10:45
반응형

어레이의 첫 번째 항목을 새 필드에 투영(MongoDB 집약)

Mongoose Aggregation(MongoDB 버전 3.2)을 사용하고 있습니다.

나는 밭이 있다.users배열입니다.하고싶어$project이 배열의 첫 번째 항목을 새 필드로 이동user.

나는 노력했다.

  { $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
}},

이건 구문이 되는 설탕이야

원답:

arrayElmAt를 사용할 수 있습니다.

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

오브젝트 배열로 단일 오브젝트 필드만 사용하는 경우:

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

다음을 사용할 수 있습니다.

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

편집(대소문자 제외 - @haytham 댓글 후)

배열의 중첩된 문서에서 단일 필드를 제외하려면 다음 두 가지 투영을 수행해야 합니다.

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

첫 번째 오브젝트 전체를 반환한 후 원하지 않는 필드를 제외합니다.

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

시작하는Mongo 4.4집약 연산자를 사용하여 배열의 첫 번째 요소에 액세스할 수 있습니다.

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

언급URL : https://stackoverflow.com/questions/39196537/project-first-item-in-an-array-to-new-field-mongodb-aggregation

반응형