仅接收字段中的值

时间:2016-10-10 15:18:40

标签: node.js mongodb mongoose

我在使用.find()命令时遇到问题,我只会在下面的例子中收到“TEMP”的值:“31”

[
    { 
        "_id": "57fb8cfee9eb8fc824000003",
        "data": "2016-10 10T12:43:42.168Z",
        "temp": "31",
        "__v": 0
    }
]

我对Node.js的看法是:

router.get('/ Temperature', function (req, res) {
    SHTemp.find({}).sort({_ id: -1}).limit(1)
    .exec(function (err, lasttemp) {
        if (err) {
            res.send('error found');
        } else {
            res.send(lasttemp);
        }
    })
})

这个想法是lasttemp,发送集合中记录的最后一个温度的值。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

find将始终返回一个包含与查询匹配的所有文档的数组。如果你只想要' 31'在这种情况下,最简单的方法就是:

router.get('/ Temperature', function (req, res) {
SHTemp.find({}).sort({_ id: -1}).limit(1)
.exec(function (err, temps) {
    if (err or !temps) {
        res.send('error found');
    } else {
        res.send(temps[0].temp);
    }
  })
})

您还可以检查findOne,以便只返回一个文档而无需限制为一个并获取数组的第一个元素。

答案 1 :(得分:0)

尝试下面。它将返回lasttemp的键值

router.get('/Temperature', function (req, res) {
    SHTemp.find({},{temp:1}).sort({_ id: -1}).limit(1)
    .exec(function (err, lasttemp) {
        if (err) {
            res.send('error found');
        } else {
            res.send(lasttemp);
        }
    })
})

答案 2 :(得分:0)

如果您想获得最近的温度,请尝试在data字段上进行排序:SHTemp.find({}).sort({data: -1}).limit(1)

此外,理想情况下,您应该将其从data重命名为date并将类型设置为Date