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

オブジェクトIDが期待どおりに機能していないことを比較するための$lookupでのmongodb$match操作

    これを試してください

    const { user } = req;
    
    productsModels.aggregate([
                { $sort: { '_id': -1 } },
                { $limit: 10 },
                {
                    $lookup: {
                        from: 'likes',
                        let: {productId:"$_id"},
                        pipeline: [
                            {
                                $match: {
                                    $expr:{$eq:['$_id', '$$productId']}},
                                    'userId': mongoose.Type.Object(user.id)
                                }
                            }
                        ],
                        as: 'liked'
                    }
                },
            ]);}
    

    クエリで欠落している2つのこと

    1)ユーザーIDをmongoオブジェクトIDに変換するため、mongoose.Types.ObjectIdを使用しました

    2)一時変数を作成しているため、内部パイプラインで外部コレクションフィールドを直接使用することはできないため、letを使用しました 宣言して内部フィールドと照合するには、$exprを使用する必要があります




    1. MongoDBドキュメントサブドキュメント配列にサブドキュメントのIDを挿入して返します

    2. mongodbの$allパラメーターはObjectIdリストでは機能しません

    3. AirflowとのMongoDB接続の設定

    4. 効率的な方法でRedisセットメンバーの更新