#c# #mongodb #mongodb.driver
#c# #mongodb #mongodb.driver
Вопрос:
Я хочу найти документ с Id=A, затем отсортировать и поместить вложенный документ в документ A. Но я не могу найти для этого никакого решения, особенно в MongoDB.Driver для c #. На уровне документа у нас есть такой запрос:
db.foo.find().sort({_id:1}).limit(50);
Но мне нужно применить функцию ограничения для вложенных документов, а не документов.
рассмотрим эту модель в качестве примера:
{
"_id" : "10000",
"password" : "password1",
"name" : "customer1",
"channels" : [
{
"id" : "1",
"name" : "cust1chan1",
"enabled" : true
},
{
"id" : "2",
"name" : "cust1chan2",
"enabled" : true
},
{
"id" : "3",
"name" : "cust1chan2",
"enabled" : true
},
{
"id" : "4",
"name" : "cust1chan2",
"enabled" : true
},...
]}
и мне нравится, чтобы мой результат был чем-то похожим на это:
{
"_id" : "10000",
"password" : "password1",
"name" : "customer1",
"channels" : [
{
"id" : "1",
"name" : "cust1chan1",
"enabled" : true
},
{
"id" : "2",
"name" : "cust1chan2",
"enabled" : true
}
]}
Ответ №1:
Я нахожу решение. Мы могли бы использовать функцию среза в проекции. Что-то вроде этого:
var filter = Builders<Foo>.Filter.Where(p => p.Id == fooId);
var slice = Builders<Foo>.Projection.Slice(p => p.Channels, 0, 2);
var sort = Builders<Foo>.Sort.Descending("Foo.Channels");
var articleDocument = _collectionFoo.Find(filter).Sort(sort).Project<Foo>(slice).FirstOrDefault();