복붙노트

[MONGODB] MongoDB를이 - 포함 또는 C #을 드라이버 특정 요소를 제외

MONGODB

MongoDB를이 - 포함 또는 C #을 드라이버 특정 요소를 제외

어떻게 C #에서 Query.EQ 문이 몽고 쿼리를 번역 할 것인가?

db.users.find({name: 'Bob'}, {'_id': 1});

그냥 하나 개의 요소 I 필요는 _id - 즉, 전 C #으로 돌아 모두를 원하지 않는다. 항상로서, 몽고 C # 드라이버 튜토리얼은 도움이되지 않습니다.

해결법

  1. ==============================

    1.업데이트 : 새로운 드라이버 버전 (1.6) 대신 LINQ를 사용하여 하드 코딩 필드 이름을 피할 수로 :

    업데이트 : 새로운 드라이버 버전 (1.6) 대신 LINQ를 사용하여 하드 코딩 필드 이름을 피할 수로 :

    var users = usersCollection.FindAllAs<T>()
                               .SetFields(Fields<T>.Include(e => e.Id, e => e.Name));
    

    당신은 MongoDB의 커서의 SetFields 방법을 통해 그것을 할 수 있습니다 :

    var users = usersCollection.FindAllAs<T>()
                     .SetFields("_id") // include only _id
                     .ToList();
    

    기본 SetFields으로 지정된 필드가 포함되어 있습니다. 특정 분야를 제외해야하는 경우 사용할 수 있습니다 :

    var users = usersCollection.FindAllAs<T>()
                     .SetFields(Fields.Exclude("_id")) // exclude _id field
                     .ToList();
    

    또는 당신이 그들을 함께 사용할 수 있습니다 :

    var users = usersCollection.FindAllAs<T>()
                     .SetFields(Fields.Exclude("_id")   // exclude _id field
                                      .Include("name")) // include name field
                     .ToList();
    
  2. ==============================

    2.드라이버의 2.0에서 시작하는 것은 새로운 비동기 전용 API가 있습니다. 이 새로운 API를 통해 차단 외관 그리고 사용되지 않습니다으로 이전 API는 더 이상 사용해서는 안된다.

    드라이버의 2.0에서 시작하는 것은 새로운 비동기 전용 API가 있습니다. 이 새로운 API를 통해 차단 외관 그리고 사용되지 않습니다으로 이전 API는 더 이상 사용해서는 안된다.

    현재 권장되는 방법은 다음을 포함하거나 특정 회원이 찾기에서 얻을 IFindFluent에 프로젝트 방법을 사용하는 것입니다 제외합니다.

    당신도 람다 식을 전달할 수 있습니다 :

    var result = await collection.Find(query).Project(hamster => hamster.Id).ToListAsync();
    

    또는 프로젝션 빌더를 사용 :

    var result = await collection.Find(query)
        .Project<Hamster>(Builders<Hamster>.Projection.Include(hamster => hamster.Id))
        .ToListAsync();
    

    var result = await collection.Find(query)
        .Project<Hamster>(Builders<Hamster>.Projection.Exclude(hamster => hamster.FirstName).
            Exclude(hamster => hamster.LastName))
        .ToListAsync();
    
  3. ==============================

    3.당신은 커서를 반환하고 달리 찾기 한 번에 모든 문서를로드하지 않는 투사와 FindAsync를 사용할 수있는 업데이트합니다. 또한 반환 된 문서의 수에 대한 정렬 순서 및 제한을 설정할 수 있습니다.

    당신은 커서를 반환하고 달리 찾기 한 번에 모든 문서를로드하지 않는 투사와 FindAsync를 사용할 수있는 업데이트합니다. 또한 반환 된 문서의 수에 대한 정렬 순서 및 제한을 설정할 수 있습니다.

        var findOptions = new FindOptions<BsonDocument>();
    
        findOptions.Projection = "{'_id': 1}";
    
        // Other options
        findOptions.Sort = Builders<BsonDocument>.Sort.Ascending("name");           
        findOptions.Limit = int.MaxValue;
    
        var collection = context.MongoDatabase.GetCollection<BsonDocument>("yourcollection");   
    
        using (var cursor = collection.FindSync("{name : 'Bob'}", options))
        {
            while (cursor.MoveNext())
            {
                var batch = cursor.Current;
                foreach (BsonDocument document in batch)
                {
                    // do stuff...
                }
            }
        }
    
  4. ==============================

    4.여기 당신이 필요로 바로 ID를 검색 할 수있는 간단한 방법이있다 :

    여기 당신이 필요로 바로 ID를 검색 할 수있는 간단한 방법이있다 :

    using MongoDB.Driver.Linq;
    using MongoDB.Entities;
    using System.Linq;
    
    namespace StackOverflow
    {
        public class User : Entity
        {
            public string Name { get; set; }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                new DB("test");
    
                (new User { Name = "Bob" }).Save();
    
                var id = DB.Collection<User>()
                           .Where(u => u.Name == "Bob")
                           .Select(u => u.ID)
                           .First();            
            }
        }
    }
    

    당신 마음, 위의 코드는 MongoDB.Entities라는 MongoDB를 래퍼 라이브러리를 사용하고 있습니다

  5. from https://stackoverflow.com/questions/8448179/mongodb-include-or-exclude-certain-elements-with-c-sharp-driver by cc-by-sa and MIT license