首页 > 解决方案 > 查询 Mongodb 适用于终端但不适用于节点 js

问题描述

我发现自己面临着一个我不知道如何解决的问题。

查询的目的:

比较选择人的文档和请求查询的人,如果选择的人的 id 存在于朋友中,则 is_friend 将等于 true,否则将等于 false。

我得到了这个查询:

users.aggregate({
    $match:{
        search:/f/
    }},{
    $lookup:
        {from:"users", let:{user:"$_id"}, pipeline:[{
            $match:{
                $expr:{
                    $and:[{
                        $in:["$$user", "$friend.id"]},{
                        $eq:["$_id", ObjectId("5bd22f28f77cfb1f6ce503ca")]
                    }]
                }
            }
        },
        {$limit:1},
        {$project:{email:0, password:0}}
    ], as:"is_friend"}},{
        $project:{name:1, search:1, desc:1, color:1, profil:1, banner:1, date:1, friend:1, is_friend:{
            $cond:{
                if:{
                    $eq:[{$arrayElemAt:["$is_friend",0]}, undefined]
                }, 
                then: "false", 
                else:"true"
            }
        }
   }
})

所以有1个用户文件:

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

当我在终端中调用这个请求时,我得到了这个结果:

{
    "_id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
    "search" : "flarize",
    "name" : "flarize",
    "color" : 0,
    "profil" : "",
    "banner" : "",
    "desc" : "",
    "date" : 1540501286109,
    "friend" : [
            {
                    "id" : ObjectId("5bd19a92da24674fdabd26b6"),
                    "date" : 1540666689579
            },
            {
                    "id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
                    "date" : 1540666689579
            }
    ],
    "is_friends" : "true"
}

这就是我想要的结果。

但是节点js我得到了这个:

{
    "_id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
    "search" : "flarize",
    "name" : "flarize",
    "color" : 0,
    "profil" : "",
    "banner" : "",
    "desc" : "",
    "date" : 1540501286109,
    "friend" : [
            {
                    "id" : ObjectId("5bd19a92da24674fdabd26b6"),
                    "date" : 1540666689579
            },
            {
                    "id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
                    "date" : 1540666689579
            }
    ],
    is_friend : {
        "_id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
        "search" : "flarize",
        "name" : "flarize",
        "color" : 0,
        "profil" : "",
        "banner" : "",
        "desc" : "",
        "date" : 1540501286109,
        "friend" : [
                {
                      "id" : ObjectId("5bd19a92da24674fdabd26b6"),
                      "date" : 1540676931288
                },
                {
                      "id" : ObjectId("5bd22f28f77cfb1f6ce503ca"),
                      "date" : 1540676931288
                }
        ]
    }
}

如何解决问题。

编辑

亩节点js代码:

 users.aggregate({
    $match:{
        search:new RegExp(req.body.search, 'i')
    }},{
    $lookup:
        {from:"users", let:{user:"$_id"}, pipeline:[{
            $match:{
                $expr:{
                    $and:[{
                        $in:["$$user", "$friend.id"]},{
                        $eq:["$_id", new ObjectId(decoded["_id"])]
                    }]
                }
            }
        },
        {$limit:1},
        {$project:{email:0, password:0}}
    ], as:"is_friend"}},{
        $project:{name:1, search:1, desc:1, color:1, profil:1, banner:1, date:1, friend:1, is_friend:{
            $cond:{
                if:{
                    $eq:[{$arrayElemAt:["$is_friend",0]}, undefined]
                }, 
                then: "false", 
                else:"true"
            }
        }
   }
}).toArray(function(err, result){
     if(err) throw err;
     ress.send(result);
});

感谢你们对我的帮助

标签: node.jsjsonmongodbboolean

解决方案


推荐阅读