【问题标题】:Get only a specified field in MongoDB with C#使用 C# 仅获取 MongoDB 中的指定字段
【发布时间】:2011-12-03 23:51:27
【问题描述】:

我第一次使用 MongoDB。

我已经阅读了这个例子:

从年龄=33 的用户中选择 a,b db.users.find({age:33}, {a:1,b:1})

但是我不能把它翻译成 C#。谁能帮帮我?

【问题讨论】:

标签: mongodb mongodb-.net-driver


【解决方案1】:

我已经使用新的 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();

【讨论】:

  • @HeoDatHades - 上述解决方案不适用于FindAsync。能否请您给我建议以使用 fieldsFindAsync 两者。
  • @prog1011 我还没用过FindAsync,但是我找到了这篇文章codementor.io/pmbanugo/…。您可以阅读并了解更多信息。
【解决方案2】:

您可以使用MongoCursor 类的SetFields 方法来完成,下面是完整示例:

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();

【讨论】:

  • 光标声明行中的照片是什么?
【解决方案3】:

你可以使用匿名类

    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();

【讨论】:

    【解决方案4】:
    //create user class
    //(not sure how your class looks like)
    
    public class User
    {
    
    public int age;
    
    public string a;
    
    public string b;
    }
    
    //then you can use LINQ easily
    
    var server = MongoServer.Create(connectionString);
    var db = server.GetDatabase("dbName");
    var usersCollection = db.GetCollection<User>("users");
    
    var filteredCollection = usersCollection.AsQueryable().Where(x=> x.age < 33).Where(x=> x.a != null).Contains(x=> x.b != null);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多