Итак, у меня есть этот набор данных в коллекции монго, и мне нужна температура и время, которое нужно вернуть в отдельном массиве для устройства, которое я прошу.MongoDB (Node.js) возвращает данные в массив
device01t: [32,00, 42,00] device01d: [дата, дата] или device02t [22,00, 43,00] и др
{
"_id" : "device01",
"event" : [
{
"temperature" : "32.00",
"when" : ISODate("2016-07-02T00:21:41.441Z")
},
{
"temperature" : "42.00",
"when" : ISODate("2016-07-02T00:21:46.766Z")
},
]
}
{
"_id" : "device02",
"event" : [
{
"temperature" : "22.00",
"when" : ISODate("2016-06-02T00:21:41.441Z")
},
{
"temperature" : "43.00",
"when" : ISODate("2016-07-02T00:21:46.766Z")
},
]
}
Я использую MQTT (отношения к вопросу), но я отправляю данные в коллекции с использованием
collection.update(
{ _id:key }, //key extracted from device topic
{ $push: { event: { value:String(payload), when:new Date() } } },
{ upsert:true },
Я попытался с помощью Node.js кода (драйвер MongoDB по умолчанию) для извлечения значения температуры устройства:
var resultArray = [];
mongo.connect(url, function(err, db) {
var cursor = db.collection('test_mqtt').find({"_id":"device01"},{"event.value":1,"_id":0});
cursor.forEach(function(doc, err) {
resultArray.push(doc.event);
}, function() {
db.close();
console.log(resultArray);
});
, но это не возвращает массив с каждым значением в своем собственном слоте, как я и предполагал. Следует ли изменить схему, или я пропущу что-то о том, как работает Mongo find()?
Определенно отправить его в правильном направлении, но я получаю сообщение об ошибке «неожиданный» идентификатор для т и д? – Lucky7Chess
ОК, так что я вытаскиваю волосы из лола. Как получить данные массива для определенного устройства/идентификатора? – Lucky7Chess
'arr.find (x => x._id === 'foo')', где 'arr' выглядит как' [{_id: 'foo'}] '. Когда я пытаюсь создать агрегаты, я использую robomongo, чтобы попробовать их и посмотреть, как выглядит структура данных. Ключ регистрирует все, что вам нужно, чтобы знать значение/структуру –