Как получить часть документа в mongodb?

270
23 июня 2017, 06:00

По умолчанию выборка содержит все поля документа, но мне не нужны все поля. Например, имеется коллекция users вида:

{
  "_id": {
    "$oid": "594706879b66306d4152039"
  },
  "userId": 123456,
  "firstName": "Anatoly",
  "lastName": "Mikhailyuk"
}

Нужно получить только имя пользователя с userId. Пытался получить его так:

var client = new MongoClient("mongodb://user:pass@server");
var db = client.GetDatabase("collection_name");
var collection = db.GetCollection<User>("users");
var filterBuilder = Builders<User>.Filter;
var filter = filterBuilder.Eq("userId", 123456);
var result = collection.Find(filter, {"_id": 0, "userId": 0, "firstName": 1, "lastName": 0})
Console.WriteLine(result);

Не сработало. Использовал VS2017 и MongoDB.driver версии 2.4.4. Есть ли способ сделать это?

Answer 1

Разобрался.

class User
{
    [BsonId]
    public ObjectId Id { get; set; }
    [BsonElement("userId")]
    [Required]
    public long UserId { get; set; }
    [BsonElement("firstName")]
    public string FirstName { get; set; }
    [BsonElement("lastName")]
    public string LastName { get; set; }
}
class UserLastName
{
    [BsonId]
    public ObjectId Id { get; set; }
    [BsonElement("lastName")]
    public string LastName{ get; set; }
}

var client = new MongoClient("mongodb://user:pass@server");
        var db = client.GetDatabase("collection");
        var collection = db.GetCollection<User>("users");
        var projection = Builders<User>.Projection.Include("lastName");
        var result = collection.Find(o => o.UserId == userId).Project<UserLastName>(projection).ToList();
        Console.WriteLine(result[0].LastName);

Использовал VS2017 и MongoDB.driver версии 2.4.4.

READ ALSO
Запретить изменения значения

Запретить изменения значения

Имею List<Class>, который раз в N минут обновляется путем десериализации JSON файла, у коллекции реализован INotifyPropertyChanged для грамотного привязывания...

268
Получить нужный текст из байтов

Получить нужный текст из байтов

Подскажите как получить нужный мне текст

224
Скачать файл с учетом авторизации C#

Скачать файл с учетом авторизации C#

ЗдравствуйтеЕсть страничка, с которой необходимо скачать файл, предварительно авторизовавшись

234
Ресурсы стилей или странное поведение

Ресурсы стилей или странное поведение

У меня в компании есть библиотека с разными "кастомными" контролами для WPF"Кастомные", они лишь потому что там изменена визуальная составляющая,...

228