2014-09-19 2 views
0

이 MongoDB 쿼리를 C#으로 변환하는 방법은 무엇입니까?C#을 사용한 MongoDB 쿼리 필드 선택

IMongoQuery searchQuery = Query.And(
      Query.EQ("_id", 10), 
      Query.ElemMatch("planet_sizes", 
      Query.EQ("id", 1))); 

나는 문서의 기본 목록을 조회하려면 :

db.lists.find({_id: 10}, {planet_sizes: {$elemMatch: {id: 1}}}) 

는 나는 내가 쉘의 내용물과 동일한 결과를 반환하지 않는 것을 의미한다 성공없이 다음 시도했다 _id 10으로 문서를 추출하고 그 배열에서 id가 1 인 배열 항목을 추출합니다. 위에서 제공된 MongoDB 문자열 쿼리는 쉘에서 작동하지만 C#에서 동등한 것을 작성하는 방법을 모르겠습니다. 미리 감사드립니다.

답변

1

, 필드 선택 SetFields에 전화를 체인에 의해 처리됩니다 Linq, 나는 경험이 없다. 그것을 달성하는 방법 Linq의 예는 교육 것입니다.
+0

우수성, 정확히 무엇을 배웠습니다. 고마워요. –

0

항상 linq http://docs.mongodb.org/ecosystem/tutorial/use-linq-queries-with-csharp-driver/ 을 사용하거나 MongoQuery 만 사용하고 싶습니까?

var docs = db.GetCollection("list") 
    .Find(Query.EQ("_id", 10)) 
    .SetFields(Fields.ElemMatch("planet_sizes", Query.EQ("id", 1))) 
    .ToList(); 
+0

은 내가으로 다이빙 대신 쿼리의 한 방법으로 자신을 잘 알고 싶어하기 때문에 그런 식으로하고 싶지 :는 C# 드라이버에서 –

+1

그 차이점은 Linq가 mongooDB뿐만 아니라 다른 점에서도 동일합니다. 어떤 경우이든 동일한 이름의 속성을 가진 클래스에 이것을 매핑하면 collection.AsQueryable ()과 같을 것입니다. 여기서 (c => c.Id == 10 && c => c.planet_sizes.Any (ps => ps.Id == 1)); – dariogriffo

+0

내가 읽었을 때, C# 쿼리는 정확히 mongo shell이하는 것과 같지만, 원하는 것을 설명하기 위해 찾고자하는 것이 아닙니다. elematch 의 mongodb 문서에서 "$ elemMatch 연산자는 지정된 모든 쿼리 조건과 일치하는 요소가 하나 이상있는 배열 필드가 들어있는 컬렉션의 문서를 찾습니다." 그래서 id가 10 인 모든 문서가 id가 1 인 planet_sizes의 요소가 하나만 반환됩니다. 주 문서에서 다른 id를 가진 planet_sizes를 필터링하지 않습니다 – dariogriffo