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数据库 **////*************** ...
随机推荐
- -webkit-tap-highlight-color
css3中有henduo 新属性,tap-highlight-color;是用于元素在移动设备IOS和adnroid上被触发点击事件时,响应的背景框的颜色. 例如在Adnroid版本的微信中,点击a标 ...
- JAVA 引入 junit工具框架
我遇到的麻烦 : 开始直接按照视频上的来做,直接也是引入的他上面的jar ,但是我只引入了一个,就是上面的junit-4.4.jar,然后就会报错,会出现,空指针的错误, 后面我又按照网上的教程 这里 ...
- 使用Git的Push出现rejected - non-fast-forward错误
通过查阅资料,发现是文件冲突问题,即本地和远程的Repository中的文件出现了冲突所致,重新检查了一下,发现是在建立Repository时,添加了ReadMe.txt文件,导致和本地得项目分支不一 ...
- 【转】iOS学习之适配iOS10
适配iOS10 2016年9月7日,苹果发布iOS 10.2016年9月14日,全新的操作系统iOS 10将正式上线. 作为开发者,如何适配iOS10呢? 1.Notification(通知) 自从N ...
- 图片Base64编码
我们经常在做Jquery插件的时候需要插入一些自定义的控件,比如说按钮,而我们自己又觉着button标签很丑,而且不同浏览器显示的效果还不一样,这个时候我们需要用到图片,当然,我们可以通过img标签添 ...
- html5shiv.js and respond.min.js
因为用到这两个插件,所以记录下来.. html5shiv:解决ie9以下浏览器对html5新增标签的不识别,并导致CSS不起作用的问题. respond.min:让不支持Css3 Media Quer ...
- OpenSSL 1.0.2e 3 Dec 2015
目录: 1,交叉编译openssl 2,win32 vc9 编译 openssl 1,交叉编译openssl [原]交叉编译openssl不修改Makefile的方法 http://blog.chi ...
- jquery基本
对于jquery属性的访问: //对于bool值的属性,元素标签中如果写了这个属性,attr能够获取到,如果没有写,就获取不到. 如:<input type="checkbox&quo ...
- HDU 3584 Cube (三维 树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3584 Cube Problem Description Given an N*N*N cube A, ...
- bzoj 3821: 玄学
题目大意 有一个长度为 n 数列,有若干个事件,事件分为操作和询问两种, 一次操作是把数列[l...r] 区间中的每个元素x变成 ax + b mod p. 一次询问是询问 执行了 第l 次到第r次操 ...