我的 MongoDB 中有这个文档
{
_id: 603e59811a640a0d1097bc35,
firstName: 'ABC',
lastName: 'XYZ',
address: 'Mars',
age: 20,
mobile: 9922334455,
email: 'abc@gmail.com',
password: 'pass',
type: 'citizen',
__v: 0
}
下面是我用来获取它的代码:
router.post('/login', (req, res) => {
const user = new User({
userName: req.body.userName,
password: req.body.password,
})
User.findOne(
{
email: user.userName,
password: user.password,
},
(err, data) => {
console.log(data)
}
)
})
在控制台中,我得到的输出为:
{
_id: 603e59811a640a0d1097bc35,
firstName: 'ABC',
lastName: 'XYZ',
address: 'Mars',
age: 20,
mobile: 9922334455,
email: 'abc@gmail.com',
password: 'pass',
type: 'citizen',
__v: 0
}
现在,当我尝试访问 console.log(data.firstName)
之类的数据时,它显示我为 undefined
。但是,如果我执行 console.log(data._id)
这是第一个属性的键,它会给出正确的值 603e59811a640a0d1097bc35
更新
我尝试调试并发现: enter image description here
result
的数据类型是 model
。如果我使用 ${result._doc.firstName}
,它会给我名字。但这是访问属性的正确方法吗?
答案 0 :(得分:0)
也许您应该对集合使用 File "/usr/local/lib/python3.9/site-packages/django/conf/__init__.py", line 170, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/local/Cellar/python@3.9/3.9.1_6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'project-x'
和 .then()
方法,因为它们返回一个 promise。
你的例子是:
.catch()
您可以使用 await User.findOne({
email: user.userName,
password: user.password
})
.then(result => {
if (result) {
console.log(`Successfully found document: ${result}.`);
} else {
console.log("No document matches the provided query.");
}
return result;
})
.catch(err => console.error(`Failed to find document: ${err}`));
中的第二个参数来指定要包含或排除的任何字段:.findOne()
有关此方法的更多信息: https://docs.mongodb.com/realm/mongodb/actions/collection.findOne/
答案 1 :(得分:0)
好的。解决了。我在响应数据上使用了 .toObject()
,它将 model
或 document
对象转换为平面 JS 对象
User.findOne({}, (err, data) => {
const obj = data.toObject()
console.log(objectt.firstName) // Logs 'ABC'
})
解决方案来源:How do you turn a Mongoose document into a plain object?