sql >> データベース >  >> NoSQL >> MongoDB

_idによるMongoDB$lookupパイプラインの一致が機能しない

    $ lookupをmongooseで使用して、コレクションがObjectIdではなくStringとして参照を格納するため、_idを一致させようとしたときにも問題が発生しました

    モデルA:{_id:ObjectId( "xxx")、b_id: "eeeee"}

    モデルB:{_id:ObjectId( "eeeee")}

    MyCollectionA.aggregate([
       {
          $lookup: {
            from: "collectionb",
            let: {id: "$b_id"},
            pipeline: [{$match: {$expr: {$eq: ["$_id", "$$id"]}}}],
            as: b
          }
    ])
    

    この例では、$$ idはObjectIdとは見なされないため、bが入力されることはありません

    オブジェクトIDの$$idとその動作を変換するプロジェクトを追加するだけです

    MyCollectionA.aggregate([
       {
          $lookup: {
            from: "collectionb",
            let: {id: "$b_id"},
            pipeline: [
               {$project: {_id: 1, bid: {"$toObjectId": "$$id"}}},
               {$match: {$expr: {$eq: ["$_id", "$bid"]}}}
            ],
            as: b
          }
    ])
    

    または、foreignField、localFieldの場合:

    MyCollectionA.aggregate([
       {
          $project:{
            _id: 1,
            b_id: {"$toObjectId": "$b_id"}
          }
       },
       {
          $lookup: {
            from: "collectionb",
            localField: "b_id",
            foreignField: "_id",
            as: b
          }
    ])
    


    1. elemMatchによるMongoDBでの並べ替え

    2. MongoDBは行方不明の日を埋めます

    3. IDによるSpringBootMongodb検索はnullを返します

    4. Node.jsのpromiseでMongoDBを使用するにはどうすればよいですか?