Как извлечь данные NumberLong из Mongodb с помощью Node.js? - PullRequest
3 голосов
/ 10 ноября 2011

Я использую Node.js и пытался сохранить данные метки времени в базе данных Mongodb с помощью следующего кода:

`articleProvider.saveUser({
        userID : user,
        email : email,
        address : "",
        time : new Date().getTime(),
        },function(error,userData){
                if(!userData){ callback(error);}
                else{ callback(null,userData);}
            });
        }
    });`

А данные, хранящиеся в базе данных (из оболочки mongo):

{ "userID" : "hem", "email" : "hereshem@gmail.com", "address" : "Kathmandu", "time" : NumberLong("1320911838254"), "_id" : ObjectId("4ebb83dea7dd40990e000002") }

НО, если я получу данные в консоли node.js, получится:

{ userID: 'hem',
  email: 'hereshem@gmail.com',
  address: 'Kathmandu',
  time: { low_: -1938088914, high_: 307 },
  _id: 4ebb83dea7dd40990e000002 }

Теперь мой вопрос: как получить это значение поля «время» с данными NumberLong?

Это дает вывод с двумя различными полями "low_" и "high_". Но я хочу вывод только "1320911838254".

Может ли кто-нибудь мне помочь?


Спасибо за ответ. Но я попытался получить номер, используя

var value = new Long(low_bits, high_bits).toNumber();

как писал г-н Лыча, но в платформе Node.js выдается сообщение об ошибке «Long is notfined» в виде:

var value = new Long(user.time.low_, user.time.high_).toNumber();
ReferenceError: Long is not defined
at /home/developer/Desktop/Express/app.js:65:1
at /home/developer/Desktop/Express/public/js/processData.js:76:10
at /home/developer/Desktop/Express/public/js/dbQuery.js:196:16
at [object Object].<anonymous> (/home/developer/node_modules/mongodb/lib/mongodb/collection.js:743:5)
at [object Object].emit (events.js:67:17)
at [object Object].<anonymous> (/home/developer/node_modules/mongodb/lib/mongodb/connections/server.js:97:12)
at [object Object].emit (events.js:64:17)
at Socket.<anonymous> (/home/developer/node_modules/mongodb/lib/mongodb/connection.js:161:16)
at Socket.emit (events.js:64:17)
at Socket._onReadable (net.js:678:14)

Как получить длинный анализатор в node.js? Любая идея?

И спасибо Страде за ответ. Но как хранить как dateObject в Mongodb? DataType сам по себе определен. Есть ли способ изменить тип данных в Mongodb? И как разобрать это?

Ответы [ 2 ]

3 голосов
/ 20 декабря 2011

Я нашел лучшее решение после долгой практики:

articleProvider.saveUser({
    userID : user,
    email : email,
    address : "",
    time : new Date().getTime().toString(),
    },function(error,userData){
            if(!userData){ callback(error);}
            else{ callback(null,userData);}
        });
    }
});

Сохраните объект даты как строковый объект с помощью «toString ()», а после запроса измените строковый объект на целочисленное значение с помощью «parseInt ()».

Я думаю, что это действительно простое и хорошее решение.

1 голос
/ 10 ноября 2011

MongoDB хранит число как 64-битный объект, но javascript не поддерживает это, поэтому они должны иметь _low и _high.Вы можете получить номер следующим образом:

var value = new Long(low_bits, high_bits).toNumber();

Читайте здесь для получения дополнительной информации.Вместо этого вам следует рассмотреть возможность использования объекта даты.

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