支持的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)的更多相关文章

  1. MongoDB学习3

    MongoDB学习(翻译3)   支持的where字句(比较多,今天先写一部分) 本节介绍支持的where字句 正如前面提到的,不是所有的C#表达式都支持where子句.您可以以此文为指导,或者你可以 ...

  2. MongoDB学习2

    MongoDB学习(翻译2) C#驱动之LINQ教程 介绍 本教程涵盖了1.8发布版本对linq查询的支持. 开始本教程之前,你应该至少阅读下C#驱动教程关于C#驱动的介绍 快速开始 首先,添加下面命 ...

  3. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

  4. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  5. MongoDB学习笔记—Linux下搭建MongoDB环境

    1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...

  6. Mongodb学习笔记一(Mongodb环境配置)

    Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...

  7. MongoDB学习记录

    一.操作符 "$lt" :"<""$lte" :"<=""$gt" :"> ...

  8. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  9. MongoDB学习:(二)MongoDB简单使用

    MongoDB学习:(二)MongoDB简单使用 MongoDB使用: 执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面 >mongo 提示该错误,说明我们系统缺少一个补丁,该 ...

  10. MongoDB学习:(一)MongoDB安装

    MongoDB学习:(一)MongoDB安装 MongoDB介绍:     直接百科了: MongoDB安装: 1:下载安装: MongoDB安装:https://www.mongodb.com/do ...

随机推荐

  1. Asp.Net+Easyui实现重大CRUD

    今天周四称,这应该给自己一个休息,好好休息休息,但无奈自己IT这是痴迷.甘心的想加加班把目标功能实现,功夫不负有心人.经过6个小时的鏖战,我最终成功了. 在此和大家分享下成果,希望大家给个赞. 我的目 ...

  2. Linux 解决文件删除,但并没有改变磁盘可用性

    昨天收到zabbix警报邮件,有一个server的 /home 文件夹的使用达成90%以上.检查,发现MongoDB数据文件到这个文件夹.高.而这个MongoDB的数据如今又都不用了.于是就直接把它的 ...

  3. Reactive Extensions(Rx)并发浅析

    Reactive Extensions(Rx)并发浅析 iSun Design & Code .Net并行编程 - Reactive Extensions(Rx)并发浅析 关于Reactive ...

  4. 圣魔大战3(Castle Fantisia)艾伦希亚战记改动器/秘籍——究极改动大法

    艾伦西亚战记== 艾伦希亚战记,是一个游戏 武器:UltraEdit(金山游侠自带的文件改动器也能够,仅仅是这个专业) 目标: 存档文件(建议先备份)  知识:save00.dat-save19.da ...

  5. C语言练手自己编写学生成绩管理系统

    #include<stdio.h> #include<stdlib.h> /*定义学生结构体*/ struct Student { ]; ]; float Mark1; flo ...

  6. BestCoder Round #11 (Div. 2) 题解

    HDOJ5054 Alice and Bob Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  7. [Openstack] Expecting an auth URL via either --os-auth-url or env[OS_AUTH_URL]

    直接使用devstack在ubuntu14.04单个节点的建筑openstack 使用keystone查询租户和用户始终报告时,这个错误! 主要看下这些配置是否正确.我们将能够解决这个问题 opens ...

  8. 国内ng学习网站

    Ngnice-国内ng学习网站2015-01-25 21:30 by 破狼, 534 阅读, 3 评论,收藏, 编辑 今天给angular新手介绍一个国内开源的ng学习网站http://www.ngn ...

  9. HTML5它contenteditable属性

    HTML5它contenteditable属性 1.功能说明 (1)功能:同意用户编辑元素中的内容 (2)说明:是一个布尔值.false是不能编辑,true为可编辑 2.分析实例 (1)content ...

  10. jquery+html三级联动下拉框

    jquery+html三级联动下拉框及详情页面加载时的select初始化问题   html写的三个下拉框,如下: <select name="ddlQYWZYJ" id=&q ...