如何解决如何使用c#在mongodb内部对象中进行聚合排序
我需要使用 mongo db 对类的内部对象进行排序。我需要根据分数进行排序
示例 Json:
{"_id":"58e46f81c4734559ac8082f0","Name":"test","Students":[{"Name":"A","Marks":"988"}]}
{"_id":"58e46f81c4734559ac8082f1","Name":"sahir","Students":[{"Name":"sahir","Marks":"311"}]}
这是课程:
public class Student
{
[BsonId]
public ObjectId Id { get; set; }
[BsonElement]
public string Name { get; set; }
public ICollection <Students> Students { get; set; }
}
public class Students
{
public string Name { get; set; }
public string Marks{ get; set; }
}
行动
public IActionResult Index()
{
//Get the database connection
mongoDatabase = GetMongoDatabase();
var x = mongoDatabase.GetCollection<Student>("student").Find(FilterDefinition<Student>.Empty).ToList();
var _dbContext = mongoDatabase.GetCollection<Student>("student");
// mongo db document collection student class students objects need to sort based on marks.
_dbContext.Aggregate<Student>()
.Sort(x=> x.students.marks).Skip((page-1)*pageSize).Limit(100);
.ToList(); -- how to do that sort in this line
or
var result = _dbContext.Aggregate<Student>().Sort(new BsonDocument("Marks",1)).ToList();
return View(result);
}
注意:
Don't provide linq Solution to convert asQuerable operators to do LINQ queries. This question is only based on an understanding of MongoDB aggregation sort and how to use that in C#
。
没有论坛有任何关于使用c#进行内部对象排序的参考。C#mongodb排序无聚合的例子很多
问题: 我有聚合排序 mongo shell 查询 .. 不知道在 c# 中实现它
解决方法
您是否正在尝试获取按分数排序的所有学生的列表?如果是这样,试试这个:
var students = await collection.AsQueryable()
.SelectMany(c => c.Students)
.OrderBy(s => s.Marks)
.Skip(50)
.Take(10)
.ToListAsync();
获得所需结果的最简单方法是通过 AsQueryable()
界面。
如果您必须使用 Aggregate()
api,您可以执行以下操作:
var students = await collection.Aggregate()
.Unwind(c => c.Students)
.ReplaceWith<BsonDocument>("$Students")
.Sort("{Marks:1}")
.Skip(0)
.Limit(10)
.As<Student>()
.ToListAsync();
测试程序:
using MongoDB.Driver;
using MongoDB.Driver.Linq;
using MongoDB.Entities;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace TestApplication
{
public class Course : Entity
{
public IEnumerable<Student> Students { get; set; }
}
public class Student
{
public string Name { get; set; }
public string Marks { get; set; }
}
public static class Program
{
private static async Task Main()
{
await DB.InitAsync("test");
await new[] {
new Course
{
Students = new[] {
new Student { Name = "a",Marks = "100"},new Student { Name = "b",Marks = "200"},}
},new Course
{
Students = new[] {
new Student { Name = "d",Marks = "400"},new Student { Name = "c",Marks = "300"},}
}
}.SaveAsync();
var students = await DB.Queryable<Course>()
.SelectMany(c => c.Students)
.OrderBy(s => s.Marks)
.Skip(50)
.Take(10)
.ToListAsync();
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。