어레이의 첫 번째 요소를 가져오고 Aggregate를 사용하여 반환하시겠습니까?
Mongo 집계를 사용하여 배열의 첫 번째 요소를 가져오고 반환하려면 어떻게 해야 합니까?
다음 코드를 사용해 보았습니다.
db.my_collection.aggregate([
{ $project: {
resp : { my_field: { $slice: 1 } }
}}
])
하지만 다음과 같은 오류가 발생합니다.
uncaught exception: aggregate failed: {
"errmsg" : "exception: invalid operator '$slice'",
"code" : 15999,
"ok" : 0
}
참고:'my_field'
4개의 요소로 구성된 배열이며 첫 번째 요소만 반환하면 됩니다.
3.2 이후로는 배열의 첫 번째 요소를 가져오는 데 사용할 수 있습니다.
db.my_collection.aggregate([
{ $project: {
resp : { $arrayElemAt: ['$my_field',0] }
}}
])
현재,$slice
연산자를 에서 사용할 수 없습니다.$project
집계 파이프라인의 작업입니다.그래서 당신이 할 수 있는 일은
첫번째$unwind
,그my_field
배열, 그리고 나서 그것들을 그룹화하고 그것들을 가져갑니다.$first
그룹의 요소입니다.
db.my_collection.aggregate([
{$unwind:"$my_field"},
{$group:{"_id":"$_id","resp":{$first:"$my_field"}}},
{$project:{"_id":0,"resp":1}}
])
또는 를 사용합니다.find()
명령, 여기서 $185 연산자를 사용할 수 있습니다.projection
일부.
db.my_collection.find({},{"my_field":{$slice:1}})
업데이트: 당신의 의견을 바탕으로, 당신은 오직 당신만 원한다고 말합니다.second
ID가 있는 레코드의 경우 배열에 있는 항목id
.
var field = 2;
var id = ObjectId("...");
그런 다음 아래 집계 명령은 다음의 두 번째 항목을 제공합니다.my_field
레코드 배열과 함께_id
,id
.
db.my_collection.aggregate([
{$match:{"_id":id}},
{$unwind:"$my_field"},
{$skip:field-1},
{$limit:1}
])
위의 논리는 더 이상의 기록에 적용될 수 없습니다. 왜냐하면 그것은 다음을 포함하기 때문입니다.$group
다음 연산자$unwind
.그$group
운영자는 특정 그룹의 모든 기록에 대해 단일 기록을 생성합니다.$limit
또는$skip
운영자들은 비효율적이기 위해 후기 단계에서 적용되었습니다.
의 작은 변형.find()
위의 쿼리를 사용하면 예상 결과도 얻을 수 있습니다.
db.my_collection.find({},{"my_field":{$slice:[field-1,1]}})
레코드 수가 매우 많은 경우 약간의 비용이 들지만 이러한 작업은 클라이언트 측에서 수행할 수 있습니다.
var field = 2;
db.my_collection.find().map(function(doc){
return doc.my_field[field-1];
})
위의 옵션 중에서 선택하는 것은 데이터 크기와 앱 설계에 따라 달라집니다.
시작하는Mongo 4.4
집계 연산자를 사용하여 배열의 첫 번째 요소에 액세스할 수 있습니다.
// { "my_field": ["A", "B", "C"] }
// { "my_field": ["D"] }
db.my_collection.aggregate([
{ $project: { resp: { $first: "$my_field" } } }
])
// { "resp" : "A" }
// { "resp" : "D" }
다음 티켓에 따르면 $209 운영자는 Mongo 3.1.4의 $project 운영에서 사용할 수 있도록 예정되어 있습니다. https://jira.mongodb.org/browse/SERVER-6074
이렇게 하면 문제가 해결됩니다.
이 버전은 현재 개발자 릴리스에 불과하며 2015년 7월 기준으로 아직 안정적이지 않습니다.이것은 10월/11월쯤 예상됩니다.
Mongo 3.1.6 이후 버전,
db.my_collection.aggregate([
{
"$project": {
"newArray" : { "$slice" : [ "$oldarray" , 0, 1 ] }
}
}
])
어디에0
시작 인덱스입니다.1
슬라이스할 요소의 개수입니다.
언급URL : https://stackoverflow.com/questions/26762887/get-first-element-in-array-and-return-using-aggregate
'IT' 카테고리의 다른 글
마이크로서비스 아키텍처에서 마이크로서비스 간에 Java 모델을 공유하는 방법 (0) | 2023.07.22 |
---|---|
컴파일러는 함수 호출의 쉼표가 쉼표 연산자가 아님을 어떻게 알 수 있습니까? (0) | 2023.07.22 |
logging.info 이 콘솔에 표시되지 않지만 경고 및 오류가 나타납니다. (0) | 2023.07.17 |
tslint가 모듈을 허용하지 않는 것이 권장되는 이유는 무엇입니까? (0) | 2023.07.17 |
새(그리고 비어 있음!)를 만드는 방법"뿌리" 지점? (0) | 2023.07.17 |