2016-05-22 2 views
0

У меня есть объект (для экземпляра Person), который я хочу отобразить.Выполнение карты в mongodb с помощью драйвера C#

Я хочу выполнить что-то заранее, как метод выбора LINQ и вернуть IEnumerable<ObjectId> вместо IEnumerable<Person>.

Я также нашел, что метод, который я искал, называется map в терминологии mongodb.

есть ли какой-либо эквивалент, который можно использовать с драйвером C#?

Монго Пример: функция Монго Я говорю о

db.getCollection('Persons').find({}).map(function(p) { return p._id; }); 

Примечание: я уже знаю

var persons= await personsCollection.Find(_ => true).ToListAsync(); 
return persons.Select(p=>p._id); 

, но я искал что-то «аккуратнее» и это уже часть драйвера mongodb.

EDIT

Я ищу что-то за проекциях.

мой код в настоящее время выглядит следующим образом:

var personsCursor= personsCollection.Find(_ => true); 
var personsProjection = personsCursor.Project<Person>(Builders<Person>.Projection.Include(p => p._id)); 
var personsIds = await personsProjection.ToListAsync(); 
return personsIds .Select(p => p._id.ToString()); 

ответ

2

Для этой цели можно использовать Projection;

Из документации:

Проецирование Поля

Много раз нам не нужны все данные, содержащиеся в документе. Конструктор проецирования поможет построить параметр проекции для операции поиска. Ниже мы исключаем поле «_ID» и выводить первую найденную документ:

var projection = Builders<BsonDocument>.Projection.Exclude("_id"); 
var document = await collection.Find(new BsonDocument()).Project(projection).FirstAsync(); 
Console.WriteLine(document.ToString()); 

И затем, внутри вашей собственной проекции, вы можете указать, какие поля нужно вернуться. Если вы перейдете по ссылке выше, вы можете найти документацию о драйвере проекции и mongo C#.

EDIT:

Кроме того, вы можете использовать projection builder, чтобы указать, что вам нужно, чтобы вернуться:

var projection = Builders<BsonDocument>.Projection.Expression(d => d._id); 
// and then put this projection to your query 
var items = await collection.Find(new BsonDocument()).Project(projection).ToListAsync(); 

и теперь, каждый элемент должен быть представлен только как _id.

Надеюсь, это поможет.

+0

Я столкнулся с проекциями и уже использовал его, но для того, чтобы перейти к Перечислимому ObjectIds, мне все еще нужно выполнить метод Select. – shirbr510

+1

Я отредактировал ответ. Я думаю, что это то, что вам нужно. – MaKCbIMKo

+0

красиво сделано! Большое спасибо :) – shirbr510