MongoDB学习笔记~根据子集合里某个属性排序
这个问题是这样的,有一个实体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学习笔记~根据子集合里某个属性排序的更多相关文章
- MongoDB学习笔记~MongoVUE对数据进行查询,排序和按需显示
回到目录 对于MongoDB这个非关系型数据库(NoSql)来说,找一个IDE工具不是很容易,还好被我找到了,它就是大名鼎鼎的MongoVUE,它可以对mongodb数据表进行增删改查,下面我主要说一 ...
- MongoDB 学习笔记(三):分页、排序与游标
一.分页 1.limit返回指定条数的数据 2.skip指定跨度 3.limit与skip结合,进行分页 二.排序 1.sort排序:指定排序的key,大于0为升序,小于0为降序.如果指定了多个排序键 ...
- MongoDB学习笔记系列
回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...
- MongoDB学习笔记系列~目录
MongoDB学习笔记~环境搭建 (2015-03-30 10:34) MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00) MongoDB学习笔 ...
- MongoDB学习笔记:快速入门
MongoDB学习笔记:快速入门 一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...
- mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...
- MongoDB学习笔记(1):MongoDB的安装和说明
MongoDB学习笔记(1):MongoDB的安装和说明 快速开始 下载地址 官网下载: https://www.mongodb.com/download-center?jmp=nav#communi ...
- MongoDB学习笔记:MongoDB 数据库的命名、设计规范
MongoDB学习笔记:MongoDB 数据库的命名.设计规范 第一部分,我们先说命名规范. 文档 设计约束 UTF-8 字符 不能包含 \0 字符(空字符),这个字符标识建的结尾 . 和 $ ...
- PHP操作MongoDB学习笔记
<?php/*** PHP操作MongoDB学习笔记*///*************************//** 连接MongoDB数据库 **////*************** ...
随机推荐
- css3选择器
原网站 cnblogs.com/tianshang/p/5982513.html通配符选择器 通配选择器的作用就是对页面上所有的元素都生效, 页面上的所有标签都会展示出通配符选择器设定的样式. 这样的 ...
- IIS 图片加载不出来
如何为IIS增加svg和woff格式文件的支持 在我们新版的TopFlow中,使用了最新的bootstrap框架,此框架使用了字体文件来显示矢量的图标,为了能在IIS上正常显示图标,可以通过增加iis ...
- js 短信验证码 计时器
$(function(){ getMsg(); //页面加载完成之后执行 }) function getMsg(){ //注册按钮的点击事件 $("#smsBtn").on(&qu ...
- Qgis连接Oracle
CMake编译中选择编译Oracle一项以后,编译的qgis才会有连接Oracle数据库的功能. 编译qgis以后,可以通过添加矢量图层中选择Oracle数据库,或是添加Oracle空间图层,或是添加 ...
- 问题2: 安装cocoaPods出现的一系列问题
在新电脑上安装cocoaPods的时候,出现了一系列的问题,现在记录下来,方便查看 1.出现 Invalid mark letter (press RETURN) 解决方案:输入 :wq 即可 2. ...
- sql查询重复数据
select *from Awhere id in (select id from A group by id having count(1) >= 2) 注释:id 为重复的关键字(更换成所需 ...
- Android :fragment介绍
一.关于Fragmemt 1.Fragment(片段),主要是为了支持更多的动态和灵活的用户界面设计,如平板电脑.Fragment允许组合和交换用户界面组件,而不需要更改视图层次结构.通过把Activ ...
- OpenCV 3.1 Set Camera Resolution 设置相机的分辨率
在OpenCV中,有强大的处理相机事件的api,但是貌似没有直接获取相机的最大分辨率的函数,通过属性CV_CAP_PROP_FRAME_HEIGHT和CV_CAP_PROP_FRAME_WIDTH直接 ...
- Spark优化之三:Kryo序列化
Spark默认采用Java的序列化器,这里建议采用Kryo序列化提高性能.实测性能最高甚至提高一倍. Spark之所以不默认使用Kryo序列化,可能的原因是需要对类进行注册. Java程序中注册很简单 ...
- express-session 保存遇到的问题
今天在用express4 试着做网站的时候,发现request.session 中一直不能保存新的值,还一直报一个错 express-session deprecated undefined resa ...