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数据库 **////*************** ...
随机推荐
- Tween Animation----Alpha渐变透明度动画
本博文是我自己操作过的并且能运行才给大家分享的 layout ----activity_main.xml 在res/新建一个anim文件夹,用来保存动画属性的xml 在anim文件夹里新建一个alph ...
- [spring源码学习]二、IOC源码——配置文件读取
一.环境准备 对于学习源码来讲,拿到一大堆的代码,脑袋里肯定是嗡嗡的,所以从代码实例进行跟踪调试未尝不是一种好的办法,此处,我们准备了一个小例子: package com.zjl; public cl ...
- LeetCode 1. Two Sum
Problem: Given an array of integers, return indices of the two numbers such that they add up to a sp ...
- 《转》Unity3D研究院编辑器之创建Lua脚本模板
Unity里能创建 c#脚本模板,但是如果我想创建Lua脚本模板怎么办呢?拓展一下编辑器吧. 设置一下Lua脚本的模板地址 : Assets/Editor/Lua/Template/lua.lua ...
- 在HTML中使用JavaScript元素
script属性<script async = async charset="utf-8" defer="defer" src="index.h ...
- 【NEUQACM OJ】1018: A+B again
1018: A+B again 题目描述 谷学长有一个非常简单的问题给你,给你两个整数A和B,你的任务是计算A+B. 输入 输入的第一行包含一个整数T(T<=20)表示测试实例的个数,然后2*T ...
- ZooKeeper个人笔记客户端watcher和AsycCallback回调
每一个Watcher具有如下属性: 1.KeeperState 2.EventType 3.path 4.process(WatchedEvent evnet)回掉方法 Watcher干嘛的?用户监听 ...
- Nginx反向代理和负载均衡
一.Nginx反向代理设置 从80端口转向其他端口反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的 ...
- Centos7强制卸载Mariadb
之前安装过Mariadb 10.2.1版本,现在安装10.1.19版本,提示安装成功了,其实是失败的.MariaDB-server 提示已经安装,通过 rpm qa|grep MariaDB 查看 发 ...
- ubuntu下出现的问题-控制台更新源失败
Ubuntu下控制台输入sudo apt-get update之后出现的问题:E: Could not get lock /var/lib/apt/lists/lock - open (11: Res ...