簡體   English   中英

如何使用_id。$ oid對象從mongodb獲取數據?

[英]How to get data from mongodb using _id.$oid object?

我正在嘗試查找具有登錄用戶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"
}

Item對象是這樣的:

{
    "_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

因此,用戶對象中的userId和項目對象中的user_id是同一類型:字符串。

可能這確實很愚蠢,但我看不到用戶_id對象與items對象中的user_id不匹配的原因。

如何使用_id。$ oid對象中的登錄用戶ID獲得具有登錄用戶ID的商品?

當您調用JSON.stringify(req.user._id); ,您將獲得字符串,它是ObjectID對象的JSON表示形式。 它應該類似於"{ "$oid": "55c772bce97e9a500b3754ae" }" ,而不是與"55c772bce97e9a500b3754ae"相同的字符串。

要僅獲取ObjectId的十六進制表示,請使用req.user._id.toHexString()

順便說一句,對於文檔之間的手動引用,使用實際的ObjectID比使用十六進制字符串更有效。 原始ObjectId為12個字節,而24個字符的十六進制字符串為28個字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM