如何从mongodb使用_id获取数据.美元oid对象



我正在尝试查找具有登录用户id的对象。

function getItems(req, res) {
    var userId = JSON.stringify(req.user._id);
    Items.find({user_id: userId}, function(err, items) {
        if (err) {
            res.send(err)
        }
        else {
            res.json(items);
        }
    }); 
}
// Logged-in user
app.get('/userItems', isLoggedIn, function(req, res) {
    getItems(req, res);
});

用户json数据如下:

"_id": {
     $oid": "55c772bce97e9a500b3754ae"
}

项目对象是这样的:

{
    "_id": {
        "$oid": "55d086a182377f840844ee78"
    },
    "user_id": "55c772bce97e9a500b3754ae",
    itemSpecs:[
        //...
    ]
}

它返回空数组,因为userId不匹配user_id我猜。当我尝试设置:

var userId = '55c772bce97e9a500b3754ae';

返回带有userId的项。

var userId = JSON.stringify(req.user._id);
console.log(typeof userId); // >> String

所以,来自user object的userId和来自items object的user_id是同一类型的:String。

可能这真的很愚蠢,但我看不出为什么用户_id对象与items对象中的user_id不匹配。

我怎么能得到项目已登录的用户id使用登录的用户id从_id。美元oid对象?

当你调用JSON.stringify(req.user._id);时,你得到string,它是一个ObjectID对象的JSON表示。它应该是沿着"{ "$oid": "55c772bce97e9a500b3754ae" }"这条线的东西,与"55c772bce97e9a500b3754ae"不同。

要获取ObjectId的十六进制表示,请使用req.user._id.toHexString()

顺便说一下,对于文档之间的手动引用,使用实际的ObjectID比使用十六进制字符串更有效。一个原始的ObjectId是12字节,而一个24个字符的十六进制字符串是28字节。

最新更新