[英]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.