2011-11-21 16 views

Odpowiedz

188
db.data.update({'name': 'zero'}, {'$set': {'value': NumberInt(0)}}) 

Można również użyć NumberLong.

+0

ale w findOne mówi NumberLong (0) nie jako 0 – daydreamer

+4

Domyślnie powłoka mongo traktuje wszystkie liczby jako liczby zmiennoprzecinkowe. Musimy więc wyraźnie określić, jaki typ numeru chcemy użyć, np. NumberInt lub NumberLong. http://docs.mongodb.org/manual/core/shell-types/ – Yadu

+8

Mam pytanie. NumberInt jest dostępny tylko w powłoce mongo, jak to zrobić w języku JavaScript takim jak node.js? – Shawyeok

-6

dobrze, to JavaScript, więc to, co masz w „value” jest liczbą, która może być liczbą całkowitą lub pływaka. Ale tak naprawdę nie ma różnicy w JavaScript. Od Learning JavaScript:

numer typu danych

typy danych Ilość w JavaScript są numery-zmiennoprzecinkowych, ale mogą lub nie mogą mieć składnik ułamkową. Jeśli nie mają one przecinka dziesiętnego ani części ułamkowej, są traktowane jako liczby całkowite-podstawa-10 w zakresie od -2 do 2 .

+20

Właściwie to nie jest prawda. Chociaż JS nie widzi różnicy, jak tylko połączysz się z mongo z innego języka (np. Java), poczujesz różnicę. –

+1

Moja aplikacja złamała się w różnych punktach tylko z jednego powodu, int jest zapisywane i zwracane jako zmiennoprzecinkowe. Podejrzewam, że przyczyną muszą być ręczne wstawienia, które zrobiłem przez powłokę mongo, która używa javascript. – Melsi

8

Nieco prostsza składnia (w Robomongo przynajmniej) pracował dla mnie:

db.database.save({ Year : NumberInt(2015) }); 
0

Jeśli typ wartość jest już dwukrotnie, a następnie zaktualizować wartość z $ zestaw poleceń nie można zmienić typ wartości double do int przy użyciu funkcji NumberInt() lub NumberLong(). Aby zmienić typ wartości, należy zaktualizować cały rekord.

var re = db.data.find({"name": "zero"}) 
re['value']=NumberInt(0) 
db.data.update({"name": "zero"}, re) 
Powiązane problemy