복붙노트

[MONGODB] 집계 작동하지 _id 사용하여 찾기 [중복]

MONGODB

집계 작동하지 _id 사용하여 찾기 [중복]

나는 MongoDB를하는 초보자 그리고 난 Node.js를 응용 프로그램에서 몽구스를 사용하여 쿼리를 작성하려고 해요 :

const objectIdValue = secondId.valueOf();


  const existedRelation = await this.model.aggregate([
    { $match: { _id: firstId } },
    { $project: {
      relations: {
        $filter: {
          input: '$links',
          as: 'link',
          cond: {
            $and: [
              { $eq: ['$$link.target.entityId', `${objectIdValue}`] },
              { $eq: ['$$link.linkTypeId', linkTypeId] },
            ],
          },

        },
      },
    },
    },
  ]);
  console.log('existedRelation: ', existedRelation);

내가 그것을 실행하면 이런 결과를 얻었다 :

existedRelation:  []

나는 몽고 셸을 사용하여 실행하려고 :

db.tasks.aggregate([
    { $match:{ _id: ObjectId("5bbf5800be37394f38a9727e") }},
    {
  $project: {
          relations:{
                $filter:{
                  input: '$links',
                  as: "link",
                  cond: {
                                  $and: [
                                  {$eq:["$$link.target.entityId", '5bbf52eabe37394f38a97276']},
                                  {$eq: ["$$link.linkTypeId", ObjectId("5bbf4bfcb075e03bd4a1b779")]}
                                  ]
                                  }

                }
              }
            }
          }

그리고 내가 원하는 결과를 얻었다. 내가 만든 그 실수는 무엇입니까?

해결법

  1. ==============================

    1.몽구스는 집계 함수에 ObjectId가에 문자열을 캐스팅하지 않습니다. 그래서 당신은 몽구스를 사용하여 수동으로 캐스팅해야합니다.

    몽구스는 집계 함수에 ObjectId가에 문자열을 캐스팅하지 않습니다. 그래서 당신은 몽구스를 사용하여 수동으로 캐스팅해야합니다.

    var mongoose = require('mongoose')
    
    const existedRelation = await this.model.aggregate([
      { "$match": { "_id": mongoose.Types.ObjectId(firstId) } },
      { "$project": {
        "relations": {
          "$filter": {
            "input": "$links",
            "as": "link",
            "cond": {
              "$and": [
                { "$eq": ["$$link.target.entityId", `${objectIdValue}`] },
                { "$eq": ["$$link.linkTypeId", linkTypeId] }
              ]
            }
          }
        }
      }}
    ])
    
  2. from https://stackoverflow.com/questions/52869651/find-using-id-not-working-with-aggregation by cc-by-sa and MIT license