Как отобразить только самый новый документ? - PullRequest
0 голосов
/ 02 января 2019

У меня есть мангуста, который ищет один документ на Node.JS / Discord.JS и сортирует его по { date: -1 }, и он все еще отправляет самый старый документ в базе данных.
Вот мой код, что я делаюнеправильно?

gLog.
  findOne({ "GiveawayHostID": name }).
  sort({ date: -1}).
  exec(function (err, host) {

Вот схема, использованная выше:

const mongoose = require("mongoose");
const gLogSchema = mongoose.Schema({
  _id: mongoose.Schema.Types.ObjectId,
  GiveawayHost: String,
  GiveawayHostID: String,
  Prize: String,
  WinnerUsername: String,
  WinnerUsernameID: String,
  time: String
});
module.exports = mongoose.model("GiveawayLogs", gLogSchema)

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Вы можете просто отсортировать его по полю _id . Это тип данных BSON, который начинается с метки времени, благодаря чему вы можете отсортировать его по метке времени вставки, которая всегда даст вам последнюю запись, если вы не создадитеВы настраиваете _id и позволяете mongodb создать его, чтобы узнать больше здесь

, поэтому все, что вам нужно сделать, это:

findOne({ "GiveawayHostID": name }).
sort({ _id: -1}).
exec(function (err, host) {

Просто процитируем важный бит из документации:

ObjectIds являются маленькими, вероятно уникальными, быстро генерируемыми и упорядоченными.Значения ObjectId состоят из 12 байтов, где первые четыре байта являются меткой времени, которая отражает создание ObjectId.В частности:

  • 4-байтовое значение, представляющее секунды после эпохи Unix,
  • 5-байтовое случайное значение и
  • 3-Счетчик байтов, начиная со случайного значения.
0 голосов
/ 02 января 2019

Похоже, у вас нет поля date в вашей схеме, поэтому mongoose не может сортировать по дате.Вы можете отсортировать по времени с помощью:

findOne({ "GiveawayHostID": name }).
sort({ time: -1}).
exec(function (err, host) {

Однако это, вероятно, не даст ожидаемых результатов, так как ваше поле time помечено как String.Таким образом, mongoose отсортирует ваше время в алфавитном порядке.

Чтобы исправить это, вы можете изменить переменную time на формат timestamp.В противном случае вам нужно будет добавить поле date в вашу схему и следовать этому примеру .

...