2010-03-16 12 views
10

Al utilizar el controlador MongoDB C# (http://github.com/samus/mongodb-csharp), parece que no puedo obtener los datos por ObjectId. A continuación el comando que estoy usando:Controlador MongoDB C# ¿No se puede encontrar por ID de objeto?

var spec = new Document { { "_id", id } }; 
var doc = mc.FindOne(spec); 

También probé esto:

var spec = new Document { { "_id", "ObjectId(\"" + id + "\")" } }; 
var doc = mc.FindOne(spec); 

Ambos nada volver. Mientras tanto, si lo consulto desde la consola mongo, devuelve el resultado esperado.

Mi pregunta es, ¿ese controlador realmente admite la búsqueda por ObjectId?

Gracias ..

Respuesta

11

No admite la búsqueda por ID de objeto. Su variable de id debe ser un Oid. ¿Es el tipo correcto?

Aquí es un programa completo que se

  • Conectar a Mongo
  • insertar un documento
  • Fetch el documento de nuevo utilizando su ID
  • Imprimir detalles del documento.

// Connect to Mongo 
Mongo db = new Mongo(); 
db.Connect(); 

// Insert a test document 
var insertDoc = new Document { { "name", "my document" } }; 
db["database"]["collection"].Insert(insertDoc); 

// Extract the ID from the inserted document, stripping the enclosing quotes 
string idString = insertDoc["_id"].ToString().Replace("\"", ""); 

// Get an Oid from the ID string 
Oid id = new Oid(idString); 

// Create a document with the ID we want to find 
var queryDoc = new Document { { "_id", id } }; 

// Query the db for a document with the required ID 
var resultDoc = db["database"]["collection"].FindOne(queryDoc); 
db.Disconnect(); 

// Print the name of the document to prove it worked 
Console.WriteLine(resultDoc["name"].ToString()); 
+0

@Ant: ¿puedes por favor elaborar? ¿Quiere decir algo como esto? var espec = nuevo Documento {{"Oid", id}}; – heisthedon

+0

eres campeón ... funciona :) gracias por tu ayuda ... – heisthedon

+0

¿Esto es usando un controlador oficial o una norma? –

0

spec var = nuevo Documento {{ "_id", ObjectId.Parse (id)}};

var doc = mc.FindOne (spec);

+0

¿Podría elaborar más su respuesta agregando un poco más de descripción sobre la solución que proporciona? – abarisone

Cuestiones relacionadas