2011-12-14 20 views
5

Estoy obteniendo datos de MongoDB y vinculados a una cuadrícula de datos WPF.Cómo convertir cadenas en ObjectId

Mi código selecciona varias filas, recupera los ID y actualiza los registros seleccionados:

var server = MongoServer.Create(this.connectionString); 
var db = server.GetDatabase(DATABASE); 
var viewTrue = db.GetCollection(RISKALERT_TBL); 
var count = viewTrue.Count(); 
foreach (RiskSettings row in grdRiskAlerts.SelectedItems) 
{ 
    viewTrue.Update(Query.EQ("ID",row.ID), Update.Set("View", "False")); 
    LoadandBindData(); 
} 

Pero no actualiza el registro.

Pensé que quizás row.id está devolviendo cadena y el tipo de datos ID es objectId.

Esta consulta funciona para otro tipo de datos, excepto en el caso anterior.

Respuesta

7

Para convertir una cadena a ObjectId, utilice el método ObjectId.Parse(string).

También intente hacer coincidir en "_id" en lugar de "ID".

Así que algo como:

viewTrue.Update(Query.EQ("_id", ObjectId.Parse(row.ID)), Update.Set("View", "False")); 
+1

Esto solo parece funcionar si la cadena ya es un ObjectId. No parece funcionar para cadenas arbitrarias. –

+1

@AsadSaeeduddin sí, es como 'int.Parse'. Si la cadena no se puede convertir a un 'ObjectId', por supuesto no podemos esperar que funcione. –

2

me encontré con el mismo problema al configurar una propiedad pública para el ID de objeto.

Mi propiedad convirtió el ObjectID a una cadena, y de vuelta a un ObjectID utilizando el siguiente fragmento de código.

El ID de objeto no estaba saliendo como una opción así que tuve que utilizar el espacio de nombres completos, para acceder a la .Parse() como esto MongoDB.Bson.ObjectId.Parse

public string Id 
    { 
     get { return Convert.ToString(_id); } 
     set { _id = MongoDB.Bson.ObjectId.Parse(value); } 
    } 

Espero que esto ayude!

0

Solo necesita requerir la función ObjectId de su mongo.

ObjectId = require('mongodb').ObjectID; 

A continuación, se puede usar como esa:

ObjectId(row.ID) 

para que pueda cambiar su línea de código:

viewTrue.Update(Query.EQ("ID",ObjectId(row.ID)), Update.Set("View", "False")); 
1

La forma más sencilla que encontré fue utilizar: new ObjectId(yourString). ..Esto le dará un MongoDB ObjectId de una cadena y debería funcionar con cualquiera de sus consultas.

Cuestiones relacionadas