我正在尝试从mongodb中检索一个json文档,并在提取后仅提取一个字段,例如“ email”,以便我可以使用它向用户发送电子邮件
setInterval(()=>{
return User.find({email: 'qw@qw'})
.then(doc => {
console.log(doc);
console.log(doc.name)
})
.catch(err => {
console.log("error")
})
}, 5000)
我的模式:
const
mongoose = require("mongoose"),
// MONGOOSE MODEL CONFIGURATION
const UserSchema = new mongoose.Schema({
email:{
type: String
},
name: {
type: String,
},
phone: {
type: String,
}
});
module.exports = mongoose.model('User', UserSchema);
我的JSON如下:
[ { _id: 5b892cdc060e8d000405d304,
email: 'qw@qw',
name: 'john',
phone: '111111111'
__v: 0 } ]
console.log(doc.name)
返回了"undefined"
有人可以帮助我解决如何正确执行此操作吗?
答案 0 :(得分:1)
我的JSON看起来像
[ { _id: 5b892cdc060e8d000405d304,
(如果这确实是JSON,那么您要做的第一件事就是使用JSON.parse
将其转换为JavaScript。我怀疑find
方法是否会向您提供JSON。)
您正在尝试读取对象的name
属性,但是doc
不是该对象。
看看[
!
这是一个包含该对象的数组。
您需要从数组中提取对象(例如,使用doc[0]
或循环),然后从中读取name属性。
可能您可能想使用findOne
而不是find
。
答案 1 :(得分:-2)
请找到更新的答案。由于结尾处有多余的]
,我指出了这一点。
更新:Mongo db
返回BSON
并将其转换为API层中的有效JSON格式。
请尝试使所有内容如下所述。 我还更新了代码笔。
根据先前的评论和Chris G的输入进行更正。
var json = '[{ "_id": "5b892cdc060e8d000405d304" ,"email": "qw@qw", "name": "john", "phone": "111111111" }]';
obj = JSON.parse(json);
console.log(obj[0].email);
// expected output: 42
console.log(obj[0].phone);
示例:
var json = '{"result":true, "count":42}';
obj = JSON.parse(json);
console.log(obj.count);
// expected output: 42
console.log(obj.result);
// expected output: true
现在您的情况是无效的json。我看到大多数键末尾都有多余的大括号。
var json = '{ "_id": "5b892cdc060e8d000405d304" ,"email": "qw@qw", "name": "john", "phone": "111111111" }';
obj = JSON.parse(json);
console.log(obj.email);
// expected output: 42
console.log(obj.phone);
// expected output: true
在这里检查