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

mongodbでクエリに参加する方法は?

    集計フレームワークの$lookup機能を使用して、1つのクエリですべてを取得するには、次のことを試してください:

    db.User.aggregate(
        [
            // First step is to extract the "friends" field to work with the values
            {
                $unwind: "$friends"
            },
            // Lookup all the linked friends from the User collection
            {
                $lookup:
                {
                    from: "User",
                    localField: "friends",
                    foreignField: "_id",
                    as: "friendsData"
                }
            },
            // Sort the results by age
            {
                $sort: { 'friendsData.age': 1 }
            },
            // Get the results into a single array
            {
                $unwind: "$friendsData"
            },
            // Group the friends by user id
            {
                $group:
                {
                    _id: "$_id",
                    friends: { $push: "$friends" },
                    friendsData: { $push: "$friendsData" }
                }
            }
        ]
    )
    

    ユーザーコレクションのコンテンツが次のようになっているとします。

    {
        "_id" : ObjectId("573b09e6322304d5e7c6256e"),
        "name" : "John",
        "age" : 30,
        "friends" : [
            "userId1",
            "userId2",
            "userId3"
        ]
    }
    { "_id" : "userId1", "name" : "Derek", "age" : 34 }
    { "_id" : "userId2", "name" : "Homer", "age" : 44 }
    { "_id" : "userId3", "name" : "Bobby", "age" : 12 }
    

    クエリの結果は次のようになります:

    {
        "_id" : ObjectId("573b09e6322304d5e7c6256e"),
        "friends" : [
            "userId3",
            "userId1",
            "userId2"
        ],
        "friendsData" : [
            {
                "_id" : "userId3",
                "name" : "Bobby",
                "age" : 12
            },
            {
                "_id" : "userId1",
                "name" : "Derek",
                "age" : 34
            },
            {
                "_id" : "userId2",
                "name" : "Homer",
                "age" : 44
            }
        ]
    }
    


    1. 別のマシンからコピーされたスナップショット(rdbファイル)からredisデータを回復するにはどうすればよいですか?

    2. MongoDBでプロパティが表示される順序を変更します

    3. オプションuseFindAndModifyはサポートされていません

    4. Mongodbは深くネストされたサブドキュメントを更新します