回到目录

这个问题是这样的,有一个实体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);
});

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

测试结果:

aaarticlea/png;base64,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" alt="" />

回到目录

MongoDB学习笔记~根据子集合里某个属性排序的更多相关文章

  1. MongoDB学习笔记~MongoVUE对数据进行查询,排序和按需显示

    回到目录 对于MongoDB这个非关系型数据库(NoSql)来说,找一个IDE工具不是很容易,还好被我找到了,它就是大名鼎鼎的MongoVUE,它可以对mongodb数据表进行增删改查,下面我主要说一 ...

  2. MongoDB 学习笔记(三):分页、排序与游标

    一.分页 1.limit返回指定条数的数据 2.skip指定跨度 3.limit与skip结合,进行分页 二.排序 1.sort排序:指定排序的key,大于0为升序,小于0为降序.如果指定了多个排序键 ...

  3. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  4. MongoDB学习笔记系列~目录

    MongoDB学习笔记~环境搭建 (2015-03-30 10:34) MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00) MongoDB学习笔 ...

  5. MongoDB学习笔记:快速入门

    MongoDB学习笔记:快速入门   一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...

  6. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  7. MongoDB学习笔记(1):MongoDB的安装和说明

    MongoDB学习笔记(1):MongoDB的安装和说明 快速开始 下载地址 官网下载: https://www.mongodb.com/download-center?jmp=nav#communi ...

  8. MongoDB学习笔记:MongoDB 数据库的命名、设计规范

    MongoDB学习笔记:MongoDB 数据库的命名.设计规范     第一部分,我们先说命名规范. 文档 设计约束 UTF-8 字符 不能包含 \0 字符(空字符),这个字符标识建的结尾 . 和 $ ...

  9. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

随机推荐

  1. HTML导航栏

    先看效果(两种,1:自己写样式,写交互,2.用jQueryUI 的menu),如下图 第一种:       第二种:   第一种样式: 然后就开始准备了,单村用js和css也可以写出来,不过既然有jq ...

  2. unity3d关于碰撞问题

    这个是我做忍者游戏出现的问题,做个记录也为以后有人遇到也可以借鉴.因为刚接触unity,所以对其所知甚少,说错的地方请指教. 问题:角色碰撞墙为什么会先触发碰撞地面,然后再触发碰撞墙 想要的效果:是角 ...

  3. js jquery中判断checkbox是否被选中的方法

    在js中: document.getElementById("checkboxID").checked   返回true或者false jQuery中: $("input ...

  4. 巴特沃斯(Butterworth)滤波器 (2) - 双线性变换

    这里接着上篇讲一下双线性变换Bilinear Transformation,它实现了模拟信号(连续域)与数字信号(离散域)之间的转换. 双线性变换公式如下: 反推可得到: 因此可以根据连续域传递函数推 ...

  5. python文件操作

    总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...

  6. js排序算法总结—冒泡,快速,选择,插入,希尔,归并

    相信排序是任何一个程序猿都会用到的东西,今天简单总结记录下常见的排序算法. 一.冒泡排序 说起冒泡排序,可能每个人都不会陌生,实现思路相当简单明了,就是不停的对数组进行两两比较,将较大(较小)的一项放 ...

  7. 【Linux】Too many open files

    ZA 的BOSS 最近出现Too many open files 异常,这个异常一般是由于打开文件数过多引起, 最常见原因是某些连接一致未关闭 记录一些排查用到的指令 查看每个用户最大允许打开文件数量 ...

  8. Ubuntu 14.04安装Cinnamon桌面环境

    2014年05月26日 薄荷开源网,mintos,网如其名,自然最关注的还是 Linux Mint 这个 DistroWatch 排名第一的 Linux 发行版.奈何此前的 Linux Mint 17 ...

  9. CentOS 6.5 安全加固及性能优化 (转)

    通过修改CentOS 6.5 的系统默认设置,对系统进行安全加固,进行系统的性能优化. 环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Centos-6.5- ...

  10. 在Excel中把横行与竖列进行置换、打勾号

    在Excel中把横行与竖列进行置换:复制要置换的单元,在新的单元上右键->选择性复制,会出现对话框,选中“置换”,即可在Excel中打勾号,左手按住ALT不放,右手在小键盘也就是右边的数字键盘依 ...