2010-03-16 6 views
10

Mit MongoDB C# -Treiber (http://github.com/samus/mongodb-csharp) scheint, ich bin nicht in der Lage, die Daten von ObjectId zu erhalten. Unter dem Befehl, den ich verwende:MongoDB C# -Treiber Kann nach Objekt-ID nicht gefunden werden?

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

ich dies auch versucht:

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

Beide geben nichts. Unterdessen, wenn ich es von der Mongo-Konsole abfrage, gibt es das erwartete Ergebnis zurück.

Meine Frage ist, unterstützt dieser Treiber tatsächlich die Suche nach ObjectId?

Dank ..

Antwort

11

Es unterstützt das Abrufen von Objekt-ID. Ihre ID-Variable sollte eine OID sein. Ist es der richtige Typ?

Hier ist ein vollständiges Programm, das

  • Connect wird
  • Legen Sie ein Dokument
  • Fetch das Dokument wieder mit seiner ID
  • Drucken des Dokuments Details Mongo.

// 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: können Sie bitte erarbeiten? Meinst du, so etwas? var spec = new Dokument {{"Oid", id}}; – heisthedon

+0

du bist champ .. es funktioniert :) danke für deine hilfe .. – heisthedon

+0

ist dies mit offiziellen Treiber oder Norm? –

0

var spec = new Document {{ "_id", ObjectId.Parse (id)}};

var doc = mc.FindOne (spez.);

+0

Könnten Sie bitte mehr Ihre Antwort ausarbeiten, indem Sie ein wenig mehr Beschreibung der von Ihnen bereitgestellten Lösung hinzufügen? – abarisone