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

$ lookupの外部フィールドは、ネストされたドキュメントのフィールドである可能性がありますか?

    $ lookupの位置演算子はありませんが、カスタムのpipelineを使用できます。 MongoDB 3.6で、カスタム結合を定義するには条件

    db.history.aggregate([
        {
            $lookup: {
                from: "childsgroup",
                let: { child_id: "$child_id" },
                pipeline: [
                    { $match: { $expr: { $in: [ "$$child_id", "$childs.id" ] } } },
                    { $unwind: "$childs" },
                    { $match: { $expr: { $eq: [ "$childs.id", "$$child_id" ] } } },
                    { $replaceRoot: { newRoot: "$childs" } }
                ],
                as: "childInfo"
            }
        }
    ])
    

    最初の$match パフォーマンスを向上させるために追加:childsgroupからそれらのドキュメントのみを検索する 一致するchild_idを含む 次に、$unwindの後にサブドキュメントを照合できます ステージ。




    1. $textクエリに必要なテキストインデックス

    2. 合計16MBの制限を回避する

    3. マングースは有効な文字列をObjectIdにキャストすることを拒否します

    4. Mongodbはubuntuで開始されていません