如何在Mongo中访问查询结果的属性

时间:2018-03-26 01:27:55

标签: mongodb mongoose

我可以在我的数据库中找到一个文档。致电:

subject = await Subject.find({ name: 'Math' });
res.send(subject);

正确返回文档:

{
        "topics": [],
        "_id": "5ab71fe102863b28e8fd1a3a",
        "name": "Math",
        "__v": 0
}

问题是当我尝试访问subject的属性时。以下任何调用都不会返回任何内容:

res.send(subject._id);
res.send(subject.name);

我已尝试subject.toObject()subject.toArray(),但收到错误消息:

(node:2068) UnhandledPromiseRejectionWarning: TypeError: subject.toObject is not a function

任何帮助将不胜感激。谢谢!

NB: 在res.send(subject)之前,我调用console.log(subject),输出为:

[ { topics: [],
    _id: 5ab71fe102863b28e8fd1a3a,
    name: 'cocei5',
    __v: 0 } ]

2 个答案:

答案 0 :(得分:0)

这是因为MongoDB中的find方法总是返回一个数组。

subject[0].propertyName

所以在上面的行中res.send(subject[0]._id); 返回一个数组。您存储在主题变量中。如果您只从DB获取单个对象,则可以使用Worksheets("Sheet1").UsedRange.Clear Worksheets("Sheet1").UsedRange.Calculate 来访问对象属性。

如果您只想发送一个ID,可以通过

进行
file_stats('created_equal.txt')

lines 2

words 13

characters 72

答案 1 :(得分:0)

只要您确定结果始终位于第0个索引上,就可以始终使用es6解构功能来获取数组中返回的第一个元素。

const [subject] = await Subject.find({ name: 'Math' });

res.send(subject._id);
res.send(subject.name);

ref:Destructuring arrays and objects Details for find api

或者您可以使用 const subject = await Subject.findOne({name:'Math'});

res.send(subject._id);
res.send(subject.name);

作为findOne返回对象,而find返回对象数组。 参考:Details for findOne api