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

  1. MongoDB学习笔记系列

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

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

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

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

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

  4. MongoDB学习记录

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

  5. PHP操作MongoDB学习笔记

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

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

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

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

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

  8. MongoDB学习(四)客户端工具备份数据库

    在上一篇MongoDB学习(三)中讲解了如何在服务器端进行数据的导入导出与备份恢复,本篇介绍下如何利用客户端工具来进行远程服务器的数据备份到本地. 以客户端工具MongoVUE为例来进行讲解: 1.首 ...

  9. mongodb学习(1) 第一次开启 mongdb

    1.启动mongdb 可以设置为开机启动 mongod -dbpath=/data/mongodb --fork --port 27017 --logpath=/usr/local/mongodb/l ...

  10. MongoDB学习之--安全和认证

    MongoDB学习之--安全和认证 本文主要介绍两部分内容,Mongodb的安全检查配置以及安全认证操作: 虽然确保系统安全是系统管理员的重要工作,但是作为程序员了解其机制也是大有好处的,毕竟不是每个 ...

随机推荐

  1. ocp11g培训内部教材_053课堂笔记(043)_数据备份

    053:数据库高级管理: 目录 第一部分:数据库备份与恢复... 4 第一章:备份恢复概述... 4 1.1 备份的意义: 4 1.2 数据库故障的类型:... 4 1.3 制定你的备份和恢复的计划. ...

  2. linux_无密登录

    使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linux主机. ssh-keygen 创建公钥和密钥. ssh-copy-id 把本地主 ...

  3. MAC使用小技巧(一)

    [ Mac OS X 终端命令开启功能 ] 1.Lion下显示资源库方法一:显示在“终端”中输入下面的命令:chflags nohidden ~/Library/ 隐藏在“终端”中输入下面的命令:ch ...

  4. 针对不同手机系统的LBS地图定位解决方案

    原文:针对不同手机系统的LBS地图定位解决方案 摘要: 针对目前的三种手机系统:Android安卓.S60塞班.IOS苹果,做出的三种不同的手机地图应用解决方案. 查阅了多数地图API对手机的支持情况 ...

  5. android 反编译(dex 和 odex),非脑残转帖,绝对可靠

    Android 反编译 反编译odex文件(比如framework.odex),若是反编译dex,直接第4步 1.因为反编译odex的工具在D:\Develop tools\android反编译工具\ ...

  6. 宏观CMS--&gt;功能体系结构内容管理系统

      CMS,Content Management System,一个非常普通的站点内容管理系统.本文章旨在从一定的高度把CMS的功能概念做一个分解论述 ,希望读者能够有所感. 1.前台 前台是站点中给 ...

  7. MVC验证10-到底用哪种方式实现客户端服务端双重异步验证

    原文:MVC验证10-到底用哪种方式实现客户端服务端双重异步验证 本篇将通过一个案例来体验使用MVC的Ajax.BeginForm或jQuery来实现异步提交,并在客户端和服务端双双获得验证.希望能梳 ...

  8. 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  9. 国内首篇介绍JanOS物联网操作系统的文章 - 如何把你的手机主板打造成物联网平台

    天地会珠海分舵注:如无意外,您现在正在看的将是国内首篇且是唯一一篇介绍炙手可热的物联网的操作系统JanOS的文章!不信你去百度!希望大家能喜欢.但本文只是引言,更多信息请还是访问JanOS的官网:ht ...

  10. 它们的定义android滑动菜单

    在这里实现了两个滑动菜单效果,的拖放内容的第一部分,菜单拖出像这样的效果感觉,另一种是拖动内容.后面的内容固定菜单.我感觉有层次感的效果,如下面 第一种效果的代码实现例如以下: package com ...