使用C#只获取MongoDB中的指定字段

Dan*_*one 18 mongodb mongodb-.net-driver

我第一次使用MongoDB.

我看过这个例子:

SELECT a,b FROM users WHERE age = 33 db.users.find({age:33},{a:1,b:1})

但我无法将其翻译成C#.谁能帮我?

And*_*ich 24

你可以使用类的SetFields方法MongoCursor,完整的例子:

var server = MongoServer.Create(connectionString);
var db = _server.GetDatabase("dbName");
db.GetCollection("users");

var cursor = Photos.FindAs<DocType>(Query.EQ("age", 33));
cursor.SetFields(Fields.Include("a", "b"));
var items = cursor.ToList();
Run Code Online (Sandbox Code Playgroud)

  • 光标声明行中的 Photos 是什么? (4认同)

Heo*_*des 22

我已使用新的C#驱动程序(2.2)翻译了您的查询

var mongoClient = new MongoClient(""mongodb://127.0.0.1:27017"");
var database = mongoClient.GetDatabase("databaseName");
IMongoCollection<Users> _collection = database.GetCollection<Users>("Users");
var condition = Builders<Users>.Filter.Eq(p => p.age, 33);
var fields = Builders<Users>.Projection.Include(p => p.a).Include(p => p.b);
var results= _collection.Find(condition).Project<Users>(fields).ToList().AsQueryable();
Run Code Online (Sandbox Code Playgroud)

  • @HeoDatHades - 上述解决方案不适用于 `FindAsync`。你能不能给我建议同时使用`fields`和`FindAsync`。 (2认同)

小智 6

你可以使用匿名类

    public class User
    {
        public int age;
        public string  a;
        public string  b;
    }

    var collection = db.GetCollection<User>("Users");
    var results = collection.Find(Builders<User>.Filter.Eq(user => user.age, 33))
            .Project(u => new { u.a, u.b }).ToList();
Run Code Online (Sandbox Code Playgroud)