Увеличиваете значение с помощью мангуста? - PullRequest
5 голосов
/ 24 января 2012

У меня есть mongoose модель в моем приложении node.js, представляющая счета.Я уже выяснил большую часть этого, но мне действительно нужно убедиться, что мои счета нумеруются / увеличиваются, чтобы иметь возможность правильно ссылаться на моего клиента.

Используя базу данных SQL, я бы создал столбец AUTO-INCREMENT, содержащий это значение, но это явно не встроено в MongoDB.Итак, как бы я сделал это с mongoose?

Вот как выглядит моя модель прямо сейчас:

var InvoiceSchema = new Schema({
    reference: {type: Number, default: 0}, // The property I want to auto-incr.

    dates: {
        created:  {type: Date, default: Date.now},
        expire: {type: Date, default: expiryDate()}
    },

    amount: {type: Number, default: 0}
    // And so on
});

Ответы [ 4 ]

26 голосов
/ 01 апреля 2014
Controller.findByIdAndUpdate(ID_HERE, {$inc: {next:1}}, function (err, data) {


});

// следующее поле, введите: Number

4 голосов
/ 24 января 2012

Как правило, в MongoDB, один не использует шаблон автоинкремента для _id (или другие поля), так как это плохо масштабируется на больших кластерах базы данных. Вместо этого обычно используются идентификаторы объектов.

Для получения дополнительной информации оформите заказ по этой ссылке: http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field

Таким образом, в нижней строке вы можете просто использовать идентификаторы объектов, они уникальны.

1 голос
/ 24 января 2012

Это это то, что вы ищете?

Допустим, UserSchema и InvoiceSchema выглядит так:

var UserSchema = new Schema({
    email: String,
    // other fields
    invoices: [{ type: Schema.Objectid, ref: 'Invoice' }]
});

var InvoiceSchema = new Schema({
    reference: { type: Schema.Objectid, ref: 'User' },

    dates: {
        created:  {type: Date, default: Date.now},
        expire: {type: Date, default: expiryDate()},
    },

    amount: {type: Number, default: 0}
    // And so on
});
0 голосов
/ 12 августа 2017

По ответу Кейтича:

Вы можете добавить дополнительный объект, чтобы удостовериться, что документ получен ПОСЛЕ того, как он был увеличен, поэтому я использую lean () и exec (), чтобы убедиться, что документ является простым объектом Javascript:

Controller.findByIdAndUpdate(ID_HERE, {$inc: {next:1}}, { $new: true})
   .lean().exec(function (err, data) {


});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...