设为首页 收藏本站
查看: 874|回复: 0

[经验分享] MongoDB学习(翻译3)

[复制链接]

尚未签到

发表于 2015-7-6 10:19:56 | 显示全部楼层 |阅读模式
支持的where字句(比较多,今天先写一部分)

本节介绍支持的where字句

正如前面提到的,不是所有的C#表达式都支持where子句。您可以以此文为指导,或者你可以尝试表达,看看它是否工作(如果不支持,抛出运行时异常,)。

Where字句通常使用where查询操作运算符来介绍,但是在某些情况下,我们必须通过&&合并使用它。

注意:


在1.4版本中还有些限制,但是之后的版本已经解除了,所以在此不再翻译。



  • && (与操作)

子表达式可以通过&&合并来查询满足所有子表达式的文档




var query =
from c in collection.AsQueryable()
where c.X > 0 && c.Y > 0
select c;
// or
var query =
collection.AsQueryable()
.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()
where (c.X % 2 == 0) && (c.X % 3 == 0)
select c;
// or
var query =
collection.AsQueryable()
.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()
where c.A.Any()
select c;
// or
var query =
collection.AsQueryable()
.Where(c => c.A.Any());
  
如果A存在一个或者多个项,则会匹配。

可转化为下面mongodb查询语句




{ A : { $ne : null, $not : { $size : 0 } } }

  


  • Any (含谓词)

这个方法用来测试集合中所有项,它会产生一个$elemMatch条件:




var query =
from c in collection.AsQueryable()
where c.A.Any(a => a.B == 1)
select c;
// or
var query =
collection.AsQueryable()
.Where(c => c.A.Any(a => a.B == 1));
  
可转化为下面mongodb查询语句:




{ A : { $elemMatch : { B : 1 } } }

  


  • Boolean 常量

这种形式主要是完整性。你可能会使用很少。它使用一个布尔常数来匹配或不匹配文档。




var query =
from c in collection.AsQueryable()
where true
select c;
// or
var query =
collection.AsQueryable()
.Where(c => true);
  
可转化为下面mongodb查询语句:




{ _id : { $exists : true } }

  
将匹配所有文档,因为_id是必填字段



  • Boolean 字段或属性

一个布尔值的字段或属性的文档没有必要和true进行比较,因为它本身已经在where的时候隐式的和true进行了比较。




var query =
from c in collection.AsQueryable()
where c.B
select c;
// or
var query =
collection.AsQueryable()
.Where(c => c.B);
  
可转化为下面mongodb查询语句:




{ B : true }

  


  • Contains (可枚举的方法)

根据上下文这个方法有两种用法

1.测试一个集合中的字段或者属性是否包含一个特定的值:




1. var query =
2.     from c in collection.AsQueryable()
3.     where c.A.Contains(123)
4.     select c;
5. // or
6. var query =
7.     collection.AsQueryable()
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()
where local.Contains(c.A)
select c;
// or
var query =
collection.AsQueryable()
.Where(c => local.Contains(c.A));
  
可转化为下面mongodb查询语句:




{ A : { $in : [1, 2, 3] } }

  


  • Contains (字符串方法)

这个方法用来筛选对象字符串类型的字段或者属性是否包含一个特定的子串:




var query =
from c in collection.AsQueryable()
where c.S.Contains("abc")
select c;
// or
var query =
collection.AsQueryable()
.Where(c => c.S.Contains("abc"));
  
可转化为下面mongodb查询语句:(使用正则表达式):




{ S : /abc/ }

  


  • ContainsAll (LINQ to MongoDB 扩展方法)

这个方法用于筛选集合中项字段或者属性是否包含提供的所有值:




var query =
from c in collection.AsQueryable()
where c.A.ContainsAll(new[] { 1, 2, 3 })
select c;
// or
var query =
collection.AsQueryable()
.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()
where c.A.ContainsAny(new[] { 1, 2, 3 })
select c;
// or
var query =
collection.AsQueryable()
.Where(c => c.A.ContainsAny(new[] { 1, 2, 3 }));
  
可转化为下面mongodb查询语句:




{ A : { $in : [1, 2, 3] } }
  


  • Count 方法 (集合数量、长度)

该方法用于筛选一个可枚举的含有特定数量项的字段或者属性。




var query =
from c in collection.AsQueryable()
where c.L.Count() == 3
select c;
// or
var query =
collection.AsQueryable()
.Where(c => c.L.Count() == 3);
  
可转化为下面mongodb查询语句:




{ L : { $size: 3 } }

  


  • Count 属性 (集合长度)

和方法用法一样,生成同样的查询语句




var query =
from c in collection.AsQueryable()
where c.L.Count == 3
select c;
// or
var query =
collection.AsQueryable()
.Where(c => c.L.Count == 3);
  
可转化为下面mongodb查询语句::




{ L : { $size: 3 } }

  剩下的待续。。。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-83739-1-1.html 上篇帖子: MongoDB学习之路 (五):更新操作符(Update Operators).2nd 下篇帖子: 使用MMS(MongoDB Monitoring Service)监控MongoDB
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表