使用LEFT JOIN进行MongoDB查询

时间:2018-10-26 11:27:07

标签: json mongodb find left-join

我正在执行mongodb查询,或者正在对SQL数据库使用LEFT JOIN。

以下是配置文件的文档:

{
    "_id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
    "search" : "flarize",
    "name" : "flarize",
    "email" : "flarize.ba73@gmail.com",
    "password" : "$2a$10$eYeOtEkEUyD7TFkjKvhZOuSSpvBolkL17TrPHuoHhOT8JrsQR0UKW",
    "color" : 0,
    "profil" : "",
    "banner" : "",
    "desc" : "",
    "date" : 1540501286109,
    "friend" : [
            {
                    "id" : ObjectId("5bd19a92da24674fdabd26b6")
            }
    ],
    "groupes" : [ ]
}

我当前正在使用此请求:

db.users.find({search: /f/}).limit(20);

此查询只是根据正则表达式给出了配置文件。

我想要更多,如果在朋友部分中存在调用此查询的人的ID,则我们添加:

is_friend: true

其他添加:

is_friend: false

编辑:

对于此查询,我们有:

调用请求者的ID,并尝试知道该ID是否存在于好友字段中。

编辑

我尝试了一下但不起作用,返回false。

herdb.users.aggregate([{$match:{"search":"flarize"}},
    {$project:
        {search: 1, name: 1, color: 1, profil: 1, banner: 1, desc: 1, date: 1, friend:10, groupes:10, 
        is_friend:
            {$cond:[
                {$eq:["$friend.id", ObjectId("5bd19a92da24674fdabd26b6")]},
                true, 
                false]
            }
        }
    }
]).pretty();

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

$unwind用作朋友,然后再匹配id

$eq不适用于数组。

db.getCollection('tests').aggregate([
    { $match: {"search":"flarize"} },
    { $unwind: "$friend"},
    { $project:{
        search: 1, name: 1, color: 1, profil: 1, banner: 1, desc: 1, date: 1, friend:10, groupes:10,
        is_friend: { $cond: [
            { $eq :["$friend.id", ObjectId("5bd19a92da24674fdabd26b6")]}, true,  false ]}
        }
    }
]);

输出:

/* 1 */
{
    "_id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
    "search" : "flarize",
    "name" : "flarize",
    "color" : 0,
    "profil" : "",
    "banner" : "",
    "desc" : "",
    "date" : NumberLong(1540501286109),
    "friend" : {
        "id" : ObjectId("5bd19a92da24674fdabd26b6"),
        "id" : ObjectId("5bd19a92da24674fdabd26b4"),
        "id" : ObjectId("5bd19a92da24674fdabd26b2"),
        "id" : ObjectId("5bd19a92da24674fdabd26b1")
    },
    "groupes" : [],
    "is_friend" : true
}

如果要friend将其返回到数组列表:

db.getCollection('tests').aggregate([
    { $match: {"search":"flarize"} },
    { $unwind: "$friend"},
    { $project:
        {
            search: 1, name: 1, color: 1, profil: 1, banner: 1, desc: 1, date: 1, friend:10, groupes:10,
            is_friend: { $cond: [
                { $eq :["$friend.id", ObjectId("5bd19a92da24674fdabd26b6")]}, true,  false ]}
        }
    },
    {$group : {
        _id: "$_id",
        search : {$first: "$search"},
        name : {$first: "$name"},
        color : {$first: "$color"},
        profil : {$first: "$profil"},
        banner : {$first: "$banner"},
        desc : {$first: "$desc"},
        date : {$first: "$date"},
        groupes : {$first: "$groupes"},
        friend : {$push: "$friend"},
        is_friend: {$first: "$is_friend"}
     }}
])