MongoDB вырезать массив и извлечь только это поле массива в проекции - PullRequest
1 голос
/ 18 февраля 2020

У меня есть схема mongodb, где документы соответствуют приведенной ниже структуре,

{"_id":"5e4aaadefrbff2150c42ed5b",
"data":[{"time":"15:24:31","amount":"34"},{"time":"15:24:33","amount":"38"},,{"time":"15:24:35","amount":"95"}],
"code":"S04",
"rollnumber":4,
"intime":"2020-02-16T12:24:21.921Z"}

И в моем коде node.js я получаю данные таким образом, чтобы найти последнее значение массива,

mycollection.find({ code: "S04", rollnumber: 4 }, { "_id": 0, code: 0, rollnumber: 0, intime: 0, data: { $slice: -1 } }, (err, result) => {
            if (err) { console.log('err', err); }
            console.log(result)
            res.json(result);
        });

Проблема в том, что я хочу получить только массив, поэтому поставьте все остальные ключи: 0. Это не работает, когда я ставлю только data:1, data: { $slice: -1 }

Это работает, когда вводятся данные: 1 без оператора слайса. В производстве список будет большим, поэтому я не могу поставить все ключи с: 0 в запросе. Пожалуйста, предложите, как поместить $ slice с: 1 для отображения только отфильтрованного массива.

1 Ответ

1 голос
/ 18 февраля 2020

Это не работает так, если вы включите _id, это должно работать, но вам просто нужно data , тогда вы можете попробовать это:

db.collection.aggregate([
              {$match : {code: "S04", rollnumber: 4}},
              {$project : { _id :0, data : {$slice : [ "$data", -1 ]}}}
])

Тест: MongoDB-Playground

...