>

MongoDB를 사용하고 있으며 다음과 같은 기록이 있습니다 :

{
    name: "a",
    status: [
        { age: 15, closed: true},
        { age: 38, closed: true},
        { age: 42, closed: false},
    ]
},
{
    name: "b",
    status: [
        { age: 29, closed: true},
        { age: 5, closed: false},
    ]
}

마지막 상태 이전 객체의나이 = 29와 같은지 확인하고 싶습니다.
어쨌든집계를 사용하지 않고 그렇게 할 수 있습니까?


  • 답변 # 1

    $arrayElemAt를 사용하여 -2 를 전달할 수 있습니다  마지막 요소 ( -1 )보다 먼저 얻을 인수  마지막을 나타냄)

    와이즈 비즈

    시도 :

    If negative, $arrayElemAt returns the element at the idx position, counting from the end of the array.

    편집 : 또는 $let 키워드와 함께 $expr을 사용하여 임시 변수를 정의 할 수 있습니다 :

    db.col.aggregate([
        {
            $addFields: {
                beforeLast: { $arrayElemAt: [ "$status", -2 ] }
            }
        },
        {
            $match: {
                "beforeLast.age": 29
            }
        },
        {
            $project: {
                beforeLast: 0
            }
        }
    ])
    
    
    db.col.find({ $expr: { $eq: [ 29, { $let: { vars: { beforeLast: { $arrayElemAt: [ "$status", -2 ] } }, in: "$$beforeLast.age" } } ] } })

관련 자료

  • 이전 Python 스크립트에서 PHP 사이트로 JSON 데이터 인쇄
  • 다음 javascript - autodesk forge viewer - "viewermodelsearch"및"viewergetselection ()"에서 다른 값 dbid 가져 오기