2010-03-16 4 views
10

MongoDB C# 드라이버 (http://github.com/samus/mongodb-csharp)를 사용하면 ObjectId에서 데이터를 가져올 수없는 것으로 보입니다. 나는 또한이 시도MongoDB C# 드라이버 개체 ID로 찾을 수 없습니까?

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

: 내가 사용 명령 아래

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

모두 아무 것도 반환하지 않습니다. 한편 mongo 콘솔에서 쿼리하면 예상 결과가 반환됩니다.

내 질문은, 그 드라이버가 실제로 ObjectId에 의한 조회를 지원합니까?

고마워요 ...

답변

11

개체 ID로 가져 오기를 지원합니다. id 변수는 Oid 여야합니다. 올바른 유형입니까? 여기

  • 연결이
  • 는 ID
  • 인쇄 문서의 정보를 사용하여 문서를 다시 가져 오기 문서
  • 를 삽입 몽고 할 것이다 완벽한 프로그램입니다.

// 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 : 정교하게 주시겠습니까? 그런 뜻입니까? var spec = 새 문서 {{ "Oid", id}}; – heisthedon

+0

당신은 챔피언 .. 작동합니다 :) 도와 주셔서 감사합니다. – heisthedon

+0

이것은 공식 드라이버 또는 Norm을 사용하고 있습니까? –

0

VAR 스펙 새 문서 = {{ "_id"ObjectId.Parse (ID)}};

var doc = mc.FindOne (spec);

+0

제공하는 솔루션에 대한 설명을 추가하여 답을 더 자세히 설명해 주시겠습니까? – abarisone

관련 문제