【发布时间】:2015-11-09 06:35:40
【问题描述】:
我正在尝试查找具有登录用户 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 的项目?
【问题讨论】:
-
这意味着您错误地导入了数据。这里的
$oid意味着被翻译成ObjectIdBSON 类型,而不是你这里的类型。在核心文档中阅读extended json。mongoimport实用程序也可以正确地本地处理此类数据。 -
var userId = req.user._id.toString();解决了!
标签: node.js mongodb express passport.js