Можно ли ссылаться на этот документ в пн goose? - PullRequest
0 голосов
/ 30 марта 2020

Я использую Mon goose в Node.js, и мне интересно, можно ли сослаться на выбранный в данный момент документ, используя «this» или аналогичный механизм. Вот пример использования, который я ищу:

Пн goose Схема:

const mySchema = mongoose.Schema({
    position: Number,
    date: Number,
    lastEventDate: Number
});

Предположим, что в какой-то момент времени происходит событие. Для документа, выбранного через его позицию, я хочу обновить «lastEventDate» до даты документа. Вот код моей мечты:

myModel.findOneAndUpdate(
    {position: myPosition},
    {$set: {
        'lastEventDate': THISDOCUMENT.date
    }}
);

Примечание: я использую $, установленный здесь, потому что фактический код обновляет вложенные документы ...

Есть ли встроенная ссылка "THISDOCUMENT", такая как тот, о котором я мечтаю, сделать все это одним запросом? Или я должен сначала запросить значение перед обновлением документа (два запроса).

Не могу найти ничего в Интернете, и я довольно новичок ie, когда дело доходит до использования "this ». Спасибо за любую помощь!

[РЕД. и я хочу установить для «lastEventDate» то же значение, что и «date» для этого документа.

У меня вопрос об эффективности: возможно ли выполнить обновление в одном запросе на загрузку? Или мне нужно сначала загрузить значение «date», прежде чем загружать его обратно в ключ «lastEventDate»?

1 Ответ

1 голос
/ 31 марта 2020

Собрав всю предоставленную информацию, рискну на возможный ответ!

Вы можете попробовать что-то вроде:

Ваша схема JS file

    const mySchema = mongoose.Schema({
        position: Number,
        date: Number,
        lastEventDate: Number
    });
    mySchema.methods.doYourThing(){
            this.lastEventDate=this.date; //it will set the lastEventDate
}

mongoose.model("myModel", MySchema, "mycollection")

Теперь, когда вы вызываете doYourThing(), действие произойдет, вы вызываете его после того, как у вас есть экземпляр режима.

Это из моего собственного кода

const token = user.generateJwt(expirationDate); //send a token, it will be stored locally in the browser

внутри функции, которая возвращает экземпляр user и в модели User я сделал функцию с именем generateJwt, как я показал, и у нас есть что-то вроде этого:

return jwt.sign(
    {
      _id: this._id, //this is created automatically by Mongo
      email: this.email,
      name: this.name,
      exp: parseInt(expiry.getTime() / 1000, 10), //Includes exp as UNIX time in seconds
      level: this.level,
      lastLogin: this.lastLogin,
      failedLogin: this.failedLogin
    },
    process.env.JWT_SECRET
  ); // DO NOT KEEP YOUR SECRET IN THE CODE!

Она возвращает всю информацию пользователя!

Пожалуйста, не стесняйтесь добавлять комментарии и отзывы, я не уверен, что это то, что вы хотите, но именно поэтому я понял ваш запрос.

Другой вариант использует Виртуалы, они также имеют доступ к this.

...