Beachten Sie, dass in meinem Fall, als ich {$ set: {val: NumberInt (0)}} bei einem "val" setzen wollte, der bereits als Long festgelegt ist, dies nicht geändert wurde. Ich musste es zuerst auf einen anderen Wert ändern, dann wieder auf 0, damit NumberInt (0) wirksam wurde
kommradHomer
Ich hatte das gleiche Problem, nachdem mir klar wurde, dass ich einen int32 fälschlicherweise in double geändert hatte. Durch Zurücksetzen mit NumberInt () wurde der Typ nur behoben, wenn ich ihn zuerst auf einen anderen Wert geändert hatte.
Standardmäßig behandelt die Mongo-Shell alle Zahlen als Gleitkommawerte. Wir müssen also explizit angeben, welche Art von Nummer wir verwenden möchten, z. B. NumberInt oder NumberLong. docs.mongodb.org/manual/core/shell-types
Yadu
12
Ich habe eine Frage. Das NumberInt wird nur in der Mongo-Shell bereitgestellt. Wie geht das in einer JavaScript-Sprache wie node.js?
Wenn der Werttyp bereits doppelt ist, kann die Aktualisierung des Werts mit dem Befehl $ set den Werttyp double nicht in int ändern, wenn die Funktionen NumberInt () oder NumberLong () verwendet werden. Um den Werttyp zu ändern, muss der gesamte Datensatz aktualisiert werden.
var re = db.data.find({"name":"zero"})
re['value']=NumberInt(0)
db.data.update({"name":"zero"}, re)
$setfunktionierte zumindest in Mongo 4.2, also war dies vielleicht ein Fehler.
Cerberus
-10
Nun, es ist JavaScript. Was Sie also in 'value' haben, ist eine Zahl, die eine ganze Zahl oder ein Gleitkomma sein kann. Aber es gibt keinen wirklichen Unterschied in JavaScript. Vom Erlernen von JavaScript :
Der Nummer-Datentyp
Zahlendatentypen in JavaScript sind Gleitkommazahlen, können jedoch eine Bruchkomponente enthalten oder nicht. Wenn sie keinen Dezimalpunkt oder keine Bruchkomponente haben, werden sie als Ganzzahlen behandelt - Basis-10-Ganzzahlen in einem Bereich von –2 53 bis 2 53 .
Eigentlich stimmt das nicht. Während JS keinen Unterschied sieht, werden Sie den Unterschied sehr spüren, sobald Sie sich aus einer anderen Sprache (z. B. Java) mit Mongo verbinden.
Omri Spector
2
Meine Anwendung ist nur aus einem Grund an verschiedenen Stellen fehlerhaft. Int wird gespeichert und als float zurückgegeben. Ich vermute, die Ursache müssen einige manuelle Einfügungen sein, die ich über die Mongo-Shell gemacht habe, die Javascript verwendet.
Antworten:
Sie können auch NumberLong verwenden.
quelle
Eine etwas einfachere Syntax (zumindest in Robomongo) hat bei mir funktioniert:
quelle
Wenn der Werttyp bereits doppelt ist, kann die Aktualisierung des Werts mit dem Befehl $ set den Werttyp double nicht in int ändern, wenn die Funktionen NumberInt () oder NumberLong () verwendet werden. Um den Werttyp zu ändern, muss der gesamte Datensatz aktualisiert werden.
quelle
$set
funktionierte zumindest in Mongo 4.2, also war dies vielleicht ein Fehler.Nun, es ist JavaScript. Was Sie also in 'value' haben, ist eine Zahl, die eine ganze Zahl oder ein Gleitkomma sein kann. Aber es gibt keinen wirklichen Unterschied in JavaScript. Vom Erlernen von JavaScript :
quelle