我想在数据库中保存一个非常大的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获取实际值吗?
您可以在使用猫鼬时使用[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此链接以获取详细信息。