MongoDB学习3
MongoDB学习(翻译3)
支持的where字句(比较多,今天先写一部分)
本节介绍支持的where字句
正如前面提到的,不是所有的C#表达式都支持where子句。您可以以此文为指导,或者你可以尝试表达,看看它是否工作(如果不支持,抛出运行时异常,)。
Where字句通常使用where查询操作运算符来介绍,但是在某些情况下,我们必须通过&&合并使用它。
注意:
在1.4版本中还有些限制,但是之后的版本已经解除了,所以在此不再翻译。
- && (与操作)
子表达式可以通过&&合并来查询满足所有子表达式的文档

var query =
from c in collection.AsQueryable<C>()
where c.X > 0 && c.Y > 0
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.X > 0 && c.Y > 0);

上面语句可转化为下述mongodb查询语句
{ X : { $gt : 0 }, Y : { $gt : 0 } } |
在某些情况下我们也可以使用$and操作符,如下面例子:查询c.X被2整除同时被3整除的文档对象:

var query =
from c in collection.AsQueryable<C>()
where (c.X % 2 == 0) && (c.X % 3 == 0)
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => (c.X % 2 == 0) && (c.X % 3 == 0));

上面例子可以转化为下面使用了 $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 == 1)
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.A.Any(a => a.B == 1));

可转化为下面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.测试一个集合中的字段或者属性是否包含一个特定的值:

1. var query = 2. from c in collection.AsQueryable<C>()
3. where c.A.Contains(123)
4. select c;
5. // or 6. var query = 7. collection.AsQueryable<C>()
8. .Where(c => c.A.Contains(123));

可转化为下面mongodb查询语句:
{ A : 123 } |
这个转换依赖于mongodb查询语言对集合项中字段的处理方式
2.测试一个字段或者属性是否包含在一个集合中

var local = new [] { 1, 2, 3 };
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[] { 1, 2, 3 })
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.A.ContainsAll(new[] { 1, 2, 3 }));

可转化为下面mongodb查询语句:
{ A : { $all : [1, 2, 3] } } |
- ContainsAny (LINQ to MongoDB 扩展方法)
这个方法用于筛选集合中项的字段或者属性是否包含任何一个提供的值:

var query =
from c in collection.AsQueryable<C>()
where c.A.ContainsAny(new[] { 1, 2, 3 })
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.A.ContainsAny(new[] { 1, 2, 3 }));

可转化为下面mongodb查询语句:
{ A : { $in : [1, 2, 3] } }
- Count 方法 (集合数量、长度)
该方法用于筛选一个可枚举的含有特定数量项的字段或者属性。

var query =
from c in collection.AsQueryable<C>()
where c.L.Count() == 3
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.L.Count() == 3);

可转化为下面mongodb查询语句:
{ L : { $size: 3 } } |
- Count 属性 (集合长度)
和方法用法一样,生成同样的查询语句

var query =
from c in collection.AsQueryable<C>()
where c.L.Count == 3
select c;
// or
var query =
collection.AsQueryable<C>()
.Where(c => c.L.Count == 3);

可转化为下面mongodb查询语句::
{ L : { $size: 3 } } |
剩下的待续。。。
MongoDB学习3的更多相关文章
- 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 ...
- MongoDB学习(四)客户端工具备份数据库
在上一篇MongoDB学习(三)中讲解了如何在服务器端进行数据的导入导出与备份恢复,本篇介绍下如何利用客户端工具来进行远程服务器的数据备份到本地. 以客户端工具MongoVUE为例来进行讲解: 1.首 ...
- mongodb学习(1) 第一次开启 mongdb
1.启动mongdb 可以设置为开机启动 mongod -dbpath=/data/mongodb --fork --port 27017 --logpath=/usr/local/mongodb/l ...
- MongoDB学习之--安全和认证
MongoDB学习之--安全和认证 本文主要介绍两部分内容,Mongodb的安全检查配置以及安全认证操作: 虽然确保系统安全是系统管理员的重要工作,但是作为程序员了解其机制也是大有好处的,毕竟不是每个 ...
随机推荐
- DP 水的问题
假设的自然数N的K随机二进制表示是不相邻的两个相邻的数字.那么我们说这个数字是K好一些. 乞讨L地点K十六进制数K的相当数量的数. 例如K = 4.L = 2什么时候.整个K好一些11.13.20.2 ...
- javascript正则表达式小数类型
假设你要阅读并了解什么,能阅读.假设只需要结果,直接跳转到这篇文章的结尾. 有使用前需求javascript正则表达式匹配小数类型,后来,他们已经写是不完全正确的识别. 后来在网上找了很多,甚至包含一 ...
- .net mvc ajax list post
http://stackoverflow.com/questions/13242414/passing-a-list-of-objects-into-an-mvc-controller-method- ...
- HTTP 错误500.19 -Internal Server Error
原文:HTTP 错误500.19 -Internal Server Error HTTP 错误500.19 -Internal Server Error 错误代码 0x80070021 评论1 字号: ...
- POJ 1182(食物链-另类做法【拆点】)[Template:并查集]
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 46039 Accepted: 13400 Description ...
- iOS MapKit导航及地理转码辅助类
头文件: #import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interface DirectionRou ...
- hibernate缓存机制和事务隔离机制
一级缓存( Session缓存) } 一级缓存的管理 ◦ 应用程序调用Session的save().update().saveOrUpdate().get()或loa ...
- 使用OpenCV玩家营造出一个视频控制(没有声音)
说明:OpenCV计算机视觉库,所以使用的图像或视频处理,因此,没有任何声音在播放视频的临时 软件:使用OpenCV制播放器(无声音) 功能说明:新建播放窗体.加入进度条能够拖动视频播放. 流程图: ...
- JS获取渲染后的样式
一般我们利用element.style.属性来获取CSS的样式,而此方法只能获取标签内的样式,无法获取头部或引入的样式,因此,而我们又需要获取其样式,则我们可以使用:(其中element为标签,pro ...
- AutoCAD 2012安装错误,与.net framework (1603错误)以及ms2005vc++的问题。
首先,这是AutoCAD2012的问题.因为,如果一台计算机已经安装了这些软件,AutoCAD是无法识别出来,因此AutoCAD就只能报错.正确的做法是:如果检测到这些软件已经被安装,则需要忽略这些问 ...