복붙노트

[MONGODB] 어떻게 MongoDB의 쿼리 가입?

MONGODB

어떻게 MongoDB의 쿼리 가입?

이 같은 사용자 문서 컬렉션이 있습니다 :

User {
   id:"001"
   name:"John",
   age:30,
   friends:["userId1","userId2","userId3"....]
}

사용자는 내가 SQL에 다음 쿼리가 많은 친구 :

select * from user where in (select friends from user where id=?) order by age

나는 MongoDB의 비슷한 뭔가를하고 싶습니다.

해결법

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

    1.편집 :이 답변은 V3.2 이전하여 MongoDB의 버전에 적용됩니다.

    편집 :이 답변은 V3.2 이전하여 MongoDB의 버전에 적용됩니다.

    당신은 당신이 한 쿼리에서 원하는 작업을 수행 할 수 없습니다. 먼저 다음, 친구의 사용자 ID의 목록을 검색 나이 문서 및 종류를 검색 할 두 번째 쿼리에 그 ID를 통과해야합니다.

    var user = db.user.findOne({"id" : "001"}, {"friends": 1})
    db.user.find( {"id" : {$in : user.friends }}).sort("age" : 1);
    
  2. ==============================

    2.하나의 쿼리가 집계 프레임 워크의 $ 조회 기능을 사용하여와 모든 것을 가지고하려면 다음을 수행하십시오

    하나의 쿼리가 집계 프레임 워크의 $ 조회 기능을 사용하여와 모든 것을 가지고하려면 다음을 수행하십시오

    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
            }
        ]
    }
    
  3. ==============================

    3.https://docs.mongodb.org/manual/reference/operator/aggregation/lookup/

    https://docs.mongodb.org/manual/reference/operator/aggregation/lookup/

    이 MongoDB의 쿼리를 결합하기위한 문서이며,이 버전 3.2의 새로운 기능입니다.

    그래서이 도움이 될 것입니다.

  4. ==============================

    4.MongoDB를 조인이없는,하지만 경우에 당신은 할 수 있습니다 :

    MongoDB를 조인이없는,하지만 경우에 당신은 할 수 있습니다 :

    db.coll.find({friends: userId}).sort({age: -1})
    
  5. ==============================

    5.MongoDB의에서 쿼리를 조인 한 종류는 목록에서 일치 넣어 IDS (IDLIST가), 그리고에 $로 다른 (또는 동일한) 컬렉션 사용 찾을 수 있습니까 해당 ID에 대해 하나의 콜렉션에 문의입니다 : IDLIST

    MongoDB의에서 쿼리를 조인 한 종류는 목록에서 일치 넣어 IDS (IDLIST가), 그리고에 $로 다른 (또는 동일한) 컬렉션 사용 찾을 수 있습니까 해당 ID에 대해 하나의 콜렉션에 문의입니다 : IDLIST

    u = db.friends.find({"friends": ? }).toArray()
    idlist= []
    u.forEach(function(myDoc) { idlist.push(myDoc.id ); } )
    db.friends.find({"id": {$in : idlist} } )
    
  6. ==============================

    6.만 채우기 배열 친구.

    만 채우기 배열 친구.

    User.findOne({ _id: "userId"})
    .populate('friends')
    .exec((err, user) => {
        //do something
    });
    

    결과는 다음과 같이 동일합니다 :

    {
        "_id" : "userId",
        "name" : "John",
        "age" : 30,
        "friends" : [
            { "_id" : "userId1", "name" : "Derek", "age" : 34 }
            { "_id" : "userId2", "name" : "Homer", "age" : 44 }
            { "_id" : "userId3", "name" : "Bobby", "age" : 12 }
        ]
    }
    

    동일이 : - ObjectId가의 배열에 채우기를 사용하여 몽구스

  7. ==============================

    7.당신은 당신이 (S-SQL 확장 SQL에) 하나의 쿼리에서 원하는 것을 할 playOrm를 사용할 수 있습니다.

    당신은 당신이 (S-SQL 확장 SQL에) 하나의 쿼리에서 원하는 것을 할 playOrm를 사용할 수 있습니다.

  8. ==============================

    8.

    var p = db.sample1.find().limit(2) , 
        h = [];
    for (var i = 0; i < p.length(); i++) 
    {
      h.push(p[i]['name']);
    }
    db.sample2.find( { 'doc_name': { $in : h } } ); 
    

    나를 위해 작동합니다.

  9. ==============================

    9.당신은 몽고 조인 쿼리를 사용하여 한 번에 그것을 할 수 있습니다. 여기의 모습 방법입니다

    당신은 몽고 조인 쿼리를 사용하여 한 번에 그것을 할 수 있습니다. 여기의 모습 방법입니다

    const joinQuery = require("mongo-join-query");
    
    joinQuery(
        mongoose.models.User,
        {
            find: {},
            populate: ["friends"],
            sort: { age: 1 },
        },
        (err, res) => (err ? console.log("Error:", err) : console.log("Success:", res.results))
    );
    

    결과는 사용자가 나이 주문한 것과 친구 모두 포함 된 개체.

    장면은 뒤에 몽고 조인 쿼리에 가입 할 수있는 모델을 확인하려면 몽구스 스키마를 사용하고 조인을 수행 할 집계 파이프 라인 및 쿼리를 작성합니다.

  10. from https://stackoverflow.com/questions/4563205/how-to-join-query-in-mongodb by cc-by-sa and MIT license