查询Mongodb适用于终端,但不适用于节点js

时间:2018-10-27 23:48:17

标签: node.js json mongodb boolean

我发现自己遇到了一个我不知道如何解决的问题。

查询的目的:

比较选择人的文档,如果好友中存在所选人的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
                }
        ]
    }
}

如何解决问题。

编辑

mu node 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);
});

感谢您对我的帮助

0 个答案:

没有答案