MongoDB学习笔记~根据子集合里某个属性排序

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

这个问题是这样的,有一个实体dog,里面有集合属性DogHistory,它里面有一些自己的属性,其中一个是SortNum,主要用来进行排序,而且这个排序可以影响主对象,即影响dog类,这个在mongodb里不容易实现,但也不是不能实现,我们需要分两步考虑这个问题,不过首先我们需要知道,mongodb里不支持子集合对象的子属性排序,但它支持子实体对象的子属性排序。

下面看一下数据结构

public class DogHistory
    {
        public bool IsHealth { get; set; }
        public Adderss Adderss { get; set; }
        public string HistoryName { get; set; }
        public string[] Foods { get; set; }
        public int SortNum { get; set; }
    }
    public class Dog : NoSqlEntity
    {
        public Des Des { get; set; }
        public string Title { get; set; }
        public string Type { get; set; }
        public string[] Foods { get; set; }
        public List<DogHistory> DogHistory { get; set; }
    }

其中Dog类子实体属性Des,它里面有属性sortNum,如果我们去排序,那是完全没有问题的,代码如下

           Console.WriteLine("--------------------子实体对象");
            var model3 = MongoDbClient.MongoManager<Dog>.Instance
              .Find(Builders<Dog>.Filter.Eq("DogHistory.HistoryName", "毛仔"))
              .SortBy(i => i.Des.SortNum).ToList();
            model3.ToList().ForEach(i =>
            {
                Console.WriteLine(i.Title + ":" + i.Title + ",sort:" + i.Des.SortNum);
            });

但如果希望根据DogHistory集合里的某个属性进行排序,那是不行的,虽然不行,但mongodb给出来了解决方案,对于集合类型可以通过索引下标的方式进行排序,这它是支持的

下面代码展现了如何实现这种复杂的排序:

            var entityIndex = MongoDbClient.MongoManager<Dog>.Instance.Find(Builders<Dog>.Filter.Eq("DogHistory.HistoryName", "大毛")).FirstOrDefault();
            var index = entityIndex.DogHistory.FindIndex(i => i.HistoryName == "大毛");
            var model2 = MongoDbClient.MongoManager<Dog>.Instance
              .Find(Builders<Dog>.Filter.Eq("DogHistory.HistoryName", "大毛"))
              .SortBy(i => i.DogHistory[index].SortNum);
            model2.ToList().ForEach(i =>
            {
                Console.WriteLine(i.Title + ":" + i.DataStatus);
            });

结果与我们预期的一样,当然,如果是简单的字符数组类型,也是可以通过对数据下标元素排序的,呵呵。

测试结果:

本文转自博客园张占岭(仓储大叔)的博客,原文链接:MongoDB学习笔记~根据子集合里某个属性排序,如需转载请自行联系原博主。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
6月前
|
NoSQL MongoDB Python
深入了解 Python MongoDB 操作:排序、删除、更新、结果限制全面解析
使用 sort() 方法对结果进行升序或降序排序。 sort() 方法接受一个参数用于“字段名”,一个参数用于“方向”(升序是默认方向)。
108 0
|
15天前
|
NoSQL Java MongoDB
MongoDB 排序
10月更文挑战第16天
17 4
|
5月前
|
NoSQL MongoDB 数据库
MongoDB排序操作解析:优化性能,精准控制数据展示
MongoDB排序操作解析:优化性能,精准控制数据展示
|
6月前
|
NoSQL MongoDB
使用MongoTemplate 对 mongodb数据进行分组、排序、分页、连表查询
使用MongoTemplate 对 mongodb数据进行分组、排序、分页、连表查询
|
NoSQL MongoDB
MongoDB 排序
MongoDB 排序
78 0
|
NoSQL MongoDB
10 MongoDB - 数据查询(排序)
10 MongoDB - 数据查询(排序)
55 0
|
索引
MongoDB-索引对排序影响
如果排序的字段, 正好是索引的字段, 那么会大大提升排序效率。
89 0
|
存储 JSON NoSQL
【BackEnd--Mongodb】学习笔记(完整详细版)
MongoDB是一种面向文档的非关系型数据库,所谓的面向文档是一种类似JSON的结构,因此可以简单理解MongoDB存储的是各种各样的JSONMongoDB可以快速开发web型应用,因为存储的是JSON格式,因此无需像关系型数据库那样需要建表,非常的的灵活。
256 0
|
NoSQL 关系型数据库 MySQL
|
NoSQL 算法 Linux
MongoDB学习笔记(五) 集群搭建之副本集
MongoDB学习笔记(五) 集群搭建之副本集
406 0