猫鼬-增加非常大的数字

问题描述 投票:0回答:1

我想在数据库中保存一个非常大的16位数字,如下所示:

{ "_id" : ObjectId("5eb550aae41d233f1058efb0"), "id" : 1, "referenceId" : 100000000000000000, "__v" : 0 }并将其值增加1。但是由于某种原因,我保存在db中的数字没有增加。这是我所做的:

    return new Promise((resolve, reject) => {
    // Incrementing the only document in 'referenceIds' collection by 1
    ReferenceId.findOneAndUpdate(
        { id: 1 },
        { $inc: { referenceId: 1 } }
    ).then(res => {
        // If no document found, creating new one.(This is a one time activity)
        if (!res) {
            let referenceIdDoc = new ReferenceId({
                id: 1,
                referenceId: 100000000000000000
            })
            referenceIdDoc.save()
                .then(res => {
                    resolve(res.referenceId);
                })
                .catch(err => {
                    reject(err);
                });
        } else {
            resolve(res.referenceId);
        }
    }).catch(err => {
        reject(err);
    });
});  

但是保存在db中的引用如下:

{
"_id" : ObjectId("5eb554cb80a31d3670afddcb"),
"id" : 1,
"referenceId" : 1e+17,
"__v" : 0
}  

并且在我给出的上述代码段中增加'referenceId'之后,'referenceId'保持不变。即100000000000000000。

我如何使用NodeJ和Mongoose在mongodb中保存和递增非常大的整数,例如100000000000000000?

有人可以在这里帮助我吗?我已经在这个问题上停留了几个小时。任何帮助将不胜感激。谢谢

UPDATE:

我已使用mongoose-long npm模块处理非常大的整数,并在我的应用程序中进行了以下更改:

const mongoose = require("mongoose");
require('mongoose-long')(mongoose);

let SchemaTypes = mongoose.Schema.Types;

const ReferenceId = mongoose.Schema({
  id: {
    type: Number,
    required: true
  },
referenceId: {
    type: SchemaTypes.Long,
    required: true
}
})

module.exports = mongoose.model("ReferenceId", ReferenceId);

。该值正按预期递增。如下所示:

{
"_id" : ObjectId("5eb55c2d83d44f1f2864ff86"),
"id" : 1,
"referenceId" : NumberLong(100000000000000005),
"__v" : 0
}  

但是,在我的NodeJs应用程序中,我没有得到'referenceId'的实际值。我得到以下对象:

{_bsontype: "Long", low_: 1569325061, high_: 23283064}  

任何人都可以告诉我如何从db获取实际值吗?

node.js mongoose mongoose-schema
1个回答
0
投票

您可以在使用猫鼬时使用[mongoose-long][1] npm软件包。您可以将值放入变量中。加1,然后更新猫鼬对象。让我知道它是否对您有用。

var mongoose = require("mongoose");
let Schema = mongoose.Schema;
require("mongoose-long")(mongoose);
mongoose.connect("mongodb://localhost/appsyoda", { useNewUrlParser: true });

var db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
db.once("open", function() {
    // we're connected!
    console.log("connected");
});

var SchemaTypes = mongoose.Schema.Types;
var partSchema = new Schema({ someLong: SchemaTypes.Long });

var Part = db.model("Part", partSchema);

var part = new Part({ someLong: "100000000000000005" });

var Long = mongoose.Types.Long;
part.someLong = part.someLong.add(Long.fromString("1"));
console.log(part.someLong.toString());
part.save();
console.log("part " + part.someLong);

代码的底特律是Long的.toString()函数。检查http://mongodb.github.io/node-mongodb-native/api-bson-generated/long.html此链接以获取详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.