MongoDB学习(翻译3)
支持的where字句(比较多,今天先写一部分)
本节介绍支持的where字句
正如前面提到的,不是所有的C#表达式都支持where子句。您可以以此文为指导,或者你可以尝试表达,看看它是否工作(如果不支持,抛出运行时异常,)。
Where字句通常使用where查询操作运算符来介绍,但是在某些情况下,我们必须通过&&合并使用它。
注意:
在1.4版本中还有些限制,但是之后的版本已经解除了,所以在此不再翻译。
- && (与操作)
子表达式可以通过&&合并来查询满足所有子表达式的文档
var query =
from c in collection.AsQueryable<C>()
where c.X > && c.Y >
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.X > && c.Y > );
上面语句可转化为下述mongodb查询语句
{ X : { $gt : 0 }, Y : { $gt : 0 } }
在某些情况下我们也可以使用$and操作符,如下面例子:查询c.X被2整除同时被3整除的文档对象:
var query =
from c in collection.AsQueryable<C>()
where (c.X % == ) && (c.X % == )
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => (c.X % == ) && (c.X % == ));
上面例子可以转化为下面使用了 $and的mongodb查询语句
{ $and : [{ X : { $mod : [2, 0] } }, { X : { $mod : [3, 0] } }] }
- Any
这个方法是用来测试集合中字段或属性是否包含任何项。
var query =
from c in collection.AsQueryable<C>()
where c.A.Any()
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.A.Any());
如果A存在一个或者多个项,则会匹配。
可转化为下面mongodb查询语句
{ A : { $ne : null, $not : { $size : 0 } } }
- Any (含谓词)
这个方法用来测试集合中所有项,它会产生一个$elemMatch条件:
var query =
from c in collection.AsQueryable<C>()
where c.A.Any(a => a.B == )
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.A.Any(a => a.B == ));
可转化为下面mongodb查询语句:
{ A : { $elemMatch : { B : 1 } } }
- Boolean 常量
这种形式主要是完整性。你可能会使用很少。它使用一个布尔常数来匹配或不匹配文档。
var query =
from c in collection.AsQueryable<C>()
where true
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => true);
可转化为下面mongodb查询语句:
{ _id : { $exists : true } }
将匹配所有文档,因为_id是必填字段
- Boolean 字段或属性
一个布尔值的字段或属性的文档没有必要和true进行比较,因为它本身已经在where的时候隐式的和true进行了比较。
var query =
from c in collection.AsQueryable<C>()
where c.B
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.B);
可转化为下面mongodb查询语句:
{ B : true }
- Contains (可枚举的方法)
根据上下文这个方法有两种用法
1.测试一个集合中的字段或者属性是否包含一个特定的值:
. var query = . from c in collection.AsQueryable<C>()
. where c.A.Contains()
. select c;
. // or . var query = . collection.AsQueryable<C>()
. .Where(c => c.A.Contains());
可转化为下面mongodb查询语句:
{ A : 123 }
这个转换依赖于mongodb查询语言对集合项中字段的处理方式
2.测试一个字段或者属性是否包含在一个集合中
var local = new [] { , , };
var query =
from c in collection.AsQueryable<C>()
where local.Contains(c.A)
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => local.Contains(c.A));
可转化为下面mongodb查询语句:
{ A : { $in : [1, 2, 3] } }
- Contains (字符串方法)
这个方法用来筛选对象字符串类型的字段或者属性是否包含一个特定的子串:
var query =
from c in collection.AsQueryable<C>()
where c.S.Contains("abc")
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.S.Contains("abc"));
可转化为下面mongodb查询语句:(使用正则表达式):
{ S : /abc/ }
- ContainsAll (LINQ to MongoDB 扩展方法)
这个方法用于筛选集合中项字段或者属性是否包含提供的所有值:
var query =
from c in collection.AsQueryable<C>()
where c.A.ContainsAll(new[] { , , })
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.A.ContainsAll(new[] { , , }));
可转化为下面mongodb查询语句:
{ A : { $all : [1, 2, 3] } }
- ContainsAny (LINQ to MongoDB 扩展方法)
这个方法用于筛选集合中项的字段或者属性是否包含任何一个提供的值:
var query =
from c in collection.AsQueryable<C>()
where c.A.ContainsAny(new[] { , , })
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.A.ContainsAny(new[] { , , }));
可转化为下面mongodb查询语句:
{ A : { $in : [, , ] } }
- Count 方法 (集合数量、长度)
该方法用于筛选一个可枚举的含有特定数量项的字段或者属性。
var query =
from c in collection.AsQueryable<C>()
where c.L.Count() ==
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.L.Count() == );
可转化为下面mongodb查询语句:
{ L : { $size: 3 } }
- Count 属性 (集合长度)
和方法用法一样,生成同样的查询语句
var query =
from c in collection.AsQueryable<C>()
where c.L.Count ==
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.L.Count == );
可转化为下面mongodb查询语句::
{ L : { $size: 3 } }
剩下的待续。。。
MongoDB学习(翻译3)的更多相关文章
- MongoDB学习3
MongoDB学习(翻译3) 支持的where字句(比较多,今天先写一部分) 本节介绍支持的where字句 正如前面提到的,不是所有的C#表达式都支持where子句.您可以以此文为指导,或者你可以 ...
- MongoDB学习2
MongoDB学习(翻译2) C#驱动之LINQ教程 介绍 本教程涵盖了1.8发布版本对linq查询的支持. 开始本教程之前,你应该至少阅读下C#驱动教程关于C#驱动的介绍 快速开始 首先,添加下面命 ...
- MongoDB学习笔记二- Mongoose
MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...
- MongoDB学习笔记系列
回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...
- MongoDB学习笔记—Linux下搭建MongoDB环境
1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...
- Mongodb学习笔记一(Mongodb环境配置)
Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...
- MongoDB学习记录
一.操作符 "$lt" :"<""$lte" :"<=""$gt" :"> ...
- PHP操作MongoDB学习笔记
<?php/*** PHP操作MongoDB学习笔记*///*************************//** 连接MongoDB数据库 **////*************** ...
- MongoDB学习:(二)MongoDB简单使用
MongoDB学习:(二)MongoDB简单使用 MongoDB使用: 执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面 >mongo 提示该错误,说明我们系统缺少一个补丁,该 ...
- MongoDB学习:(一)MongoDB安装
MongoDB学习:(一)MongoDB安装 MongoDB介绍: 直接百科了: MongoDB安装: 1:下载安装: MongoDB安装:https://www.mongodb.com/do ...
随机推荐
- WIN2003+IIS6+FastCGI+PHP5.4.30的安装配置
原文:WIN2003+IIS6+FastCGI+PHP5.4.30的安装配置 说明:PHP5.5已不支持win2003了,Win2003最高能安装PHP5.4.30. 安装好系统:并且安装好IIS6. ...
- Net开源网络爬虫
转载.Net开源网络爬虫Abot介绍 .Net中也有很多很多开源的爬虫工具,abot就是其中之一.Abot是一个开源的.net爬虫,速度快,易于使用和扩展.项目的地址是https://code.goo ...
- 归并排序 & 快速排序
归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 将已有序的子序列合并,得到完全有序的序列:即先使每个子序列有 ...
- Web API 2 对 CORS 的支持
Web API 2 对 CORS 的支持 CORS概念 跨域资源共享 (CORS) 是一种万维网联合会 (W3C) 规范(通常被认为是 HTML5 的一部分),它可让 JavaScript 克服由浏览 ...
- Struts2.0+Spring3+Hibernate3(SSH~Demo)
Struts2.0+Spring3+Hibernate3(SSH~Demo) 前言:整理一些集成框架,发现网上都是一些半成品,都是共享一部分出来(确实让人很纠结),这是整理了一份SSH的测试案例,完全 ...
- Android 4.4 沉浸式透明状态栏与导航栏
Android 系统自4.2 開始 UI 上就没多大改变,4.4 也仅仅是添加了透明状态栏与导航栏的功能,如图 那么如今我就来给大家解说下怎样使用这个新特性,让你的 app 尾随潮流,当然假设你不在乎 ...
- linux open
一直记住不打开文件时候的mode,今天发现原来可以直接用0644这样的八进制数字代替,好开森 #include <stdio.h> #include <sys/types.h> ...
- MVC4新功能...压缩和合并js文件和样式文件
1.在App_Start文件夹中BundleConfig.cs类中添加相应的文件 1.1bundles.Add(new ScriptBundle("~/bundles/adminJs&quo ...
- 在vi中使用perltidy格式化perl代码
格式优美的perl代码不但让人赏心悦目,并且能够方便阅读. perltidy的是sourceforge的一个小项目,在我们写完乱七八糟的代码后,他能像变魔术一样把代码整理得漂美丽亮,快来体验一下吧!! ...
- FineUI开发实践
ASP.NET-FineUI开发实践-7 摘要: 下拉显示grid列表.其实很简单,但是试了很多方法,水平有限,主要是都不好使,还是简单的好使了,分享下.先是看了看网上的,是直接写个了extjs控件类 ...