Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongodb$inc回报双倍_Javascript_Mongodb - Fatal编程技术网

Javascript Mongodb$inc回报双倍

Javascript Mongodb$inc回报双倍,javascript,mongodb,Javascript,Mongodb,我正在尝试将\u id设置为文档中所述的自动递增Int,这几乎可以正常工作,但在尝试插入记录时,函数返回的值是双精度,而不是整数,因此我尝试了以下更改 db.system.js.save({ _id : "getNextId", value : function (name) { var ret = db.counters.findAndModify( { query: { _id: name }, update: { $i

我正在尝试将
\u id
设置为文档中所述的自动递增
Int
,这几乎可以正常工作,但在尝试插入记录时,函数返回的值是
双精度
,而不是
整数
,因此我尝试了以下更改

db.system.js.save({
_id : "getNextId",
value : function (name) {
    var ret = db.counters.findAndModify(
        {
            query: { _id: name },
            update: { $inc: { seq: 1 } },
            new: true
        }
    );
    return Math.ceil(ret.seq);  //not working
    //return parseInt(ret.seq); //not working
   }    
 });

好吧,我试过了,效果很好

db.system.js.save({
_id : "getNextId",
value : function (name) {
    var ret = db.counters.findAndModify(
        {
            query: { _id: name },
            update: { $inc: { seq: 1 } },
            new: true
        }
    );
    return NumberLong(ret.seq); //working
}    
});

JavaScript对于所有数值只有浮点
Number
类型,因此您必须使用shell中的和对象来表示MongoDB中的真正整数值

因此,
parseInt
所做的是解析一个整数格式的字符串,但将该值作为浮点
Number
返回。正如您所发现的,您需要将数值包装在MongoDB的一个整数对象中,以便将该值作为整数存储在数据库中:

return NumberInt(ret.seq);  // For 32-bit integers

return NumberLong(ret.seq); // for 64-bit integers