2016-02-16 14 views
6

sto aggiornando un campo semplice.Mongo lancio "Nome elemento 'nome' non è valido' eccezione

var filterDocument = new BsonDocument { { "name", "alice" } }; 

var newDocument = new BsonDocument { { "name", "Alice" } }; 

collection.UpdateOne(filterDocument, newDocument); 

Ma quando raggiungo la dichiarazione l'aggiornamento ottengo un'eccezione {"Element name 'name' is not valid'."}

Cosa c'è di sbagliato ? con quel nome elemento

Aggiornamento

Ri-scrittura a questo:

var filterDocument = new BsonDocument { { "x", "alice" } }; 

var newDocument = new BsonDocument { { "y", "Alice" } }; 

collection.UpdateOne(filterDocument, newDocument); 

generare l'eccezione {"Element name 'y' is not valid'."}

Inoltre, UpdateOne() o UpdateMany() fa differenza.

Inoltre, dal guscio va bene.

> db.crud.update({name:'alice'},{name:'Alice'}) 
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 
+0

Strano ... È il "nome non valido" con 'filterDocument' o' newDocument'? – AustinWBryan

+0

Buon punto! Sembra essere il 'newDocument'. Ho appena cambiato in 'x' e ho ottenuto la stessa eccezione, ma con' x' invece. – BanksySan

+0

Hm .. Stavo per dire, forse è perché ottiene il "nome" "mescolato con un termine, ma suppongo di no ... Prova a cambiare il nome di' filterDocument' in '" y "', quindi prova a cambiarlo valore a '" Alice "' – AustinWBryan

risposta

11

In contrasto update, updateOne sembra richiedere un operatore aggiornamento;

> db.test.updateOne({name:'alice'},{name:'Alice'}) 
2016-02-16T19:04:07.689+0000 E QUERY [thread1] Error: the update operation document must contain atomic operators 

> db.test.updateOne({name:'alice'},{$set: {name:'Alice'}}) 
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } 

... il che significa che probabilmente il documento dovrebbe essere simile;

var newDocument = 
    new BsonDocument { { "$set", new BsonDocument {"name", "Alice" } } }; 

... o se davvero intenzione di sostituire l'intero documento, utilizzare replaceOne, che dovrebbe funzionare con i documenti esistenti per sostituire l'intero documento corrispondente.

+0

Mi chiedevo se fosse qualcosa del genere. Sostituisci la modifica di v. Farò un tentativo! – BanksySan

+0

cool .. grazie: (y) –

Problemi correlati