`
clearity
  • 浏览: 36786 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MongoDB:查找列表大小大于N的所有文档

阅读更多

看以下的文档:

 

Collection : domain
{
	"_id" : 1001,
	"domainName" : "google.com"
	"tag" : [
		"search engine",
		"search",
		"find anything",
		"giant"
		]
},
{
	"_id" : 1002,
	"domainName" : "yahoo.com"
	"tag" : [
		"search engine",
		"online portal",
		]
},
{
	"_id" : 1003,
	"domainName" : "amazon.com"
}

 

1.问题

应该怎么查找“tag”值大于3的所有文档

 

组合使用$size和$gt两个函数

db.domain.find( { tag: {$size: {$gt:3} } } );
null

 

虽然执行没有错误,但是返回结果是null,也就是说这样来实现是不对的。

 

试试$where操作符

 

db.domain.find( {$where:'this.tag.length>3'} )
 
MongoDB v 2.2.3
uncaught exception: error {
	"$err" : "error on invocation of $where function:\nJS Error: TypeError: this.tag has no properties nofile_a:0",
	"code" : 10071
}
 
or 
 
MongoDB v 2.4.5
JavaScript execution failed: error: {
        "$err" : "JavaScript execution failed: TypeError: Cannot read property 'length' of undefined
 near '' ",
        "code" : 16722
} at src/mongo/shell/query.js:L128
>

 

看起来这样也不管用?

 

2.方案

其实$where操作符是管用的,只是不是所有的文档中都有”tag“这个字段,结果导致了”no properties“异常。

 

  2.1 组合使用$exists和$where操作符

  

db.domain.find( {tag : {$exists:true}, $where:'this.tag.length>3'} )
 
{
	"_id" : 1001,
	"domainName" : "google.com"
	"tag" : [
		"search engine",
		"search",
		"find anything",
		"giant"
		]
}

 

分享到:
评论

相关推荐

    mongodb命令介绍

    - 大于等于:`db.userInfo.find({"age":{"$gte":25}})` —— 查找 age 大于等于 25 的文档。 - 小于等于:`db.userInfo.find({"age":{"$lte":25}})` —— 查找 age 小于等于 25 的文档。 - 多条件:`db.userInfo....

    MongoDB 数据库基本操作与功能详解

    对于存储大于 BSON 文档大小限制(16MB)的文件,MongoDB 提供了 GridFS,一种用于存储和检索大文件的规范。GridFS 将文件拆分为多个小块存储,确保数据的安全和完整性。 ##### 8. 安全性 MongoDB 提供了多层次的...

    MongoDB教程之查询操作实例

    - 例如,查找嵌入文档`address`中的`city`字段为"New York"的文档: ```javascript > db.test.find({"address.city": "New York"}) ``` 以上就是MongoDB教程中关于查询操作的基本实例和技巧。通过熟练掌握这些...

    mongodb_架构设计基础schemadesign-cn

    - 条件运算符:如$ne(不等于)、$in(在列表中)、$nin(不在列表中)、$mod(取模)、$all(所有)、$size(大小)、$exists(存在)、$type(类型)等,以及比较运算符如$lt(小于)、$lte(小于等于)、$gt(大于)、$gte(大于等于)。...

    MongoDB 总结

    2. **`show dbs`**:展示当前连接中所有的数据库列表。 3. **`db`**:显示当前所选的数据库名称。 4. **`db.APP_HANSON.insert({“name”:”hanson”})`**:向数据库中插入一条记录。这里以 `APP_HANSON` 集合为例...

    mongo note

    - 例如,查询`{xxx:{$gt:100}},{xxx:{$lt:9.95}}`表示查找`xxx`字段值大于100或小于9.95的文档。 以上就是根据给定的文件信息整理出来的MongoDB关键知识点。这些知识点覆盖了从安装配置到数据操作等多个方面,对于...

    mogodb上传下载

    MongoDB是一种流行的开源、分布式文档数据库系统,以其灵活性、高性能和易用性而备受青睐。在本文中,我们将深入探讨MongoDB的文件上传与下载功能,以及如何在实际操作中利用这些特性进行数据存储。 首先,MongoDB...

    MongoDB 常用命令总结

    MongoDB 是一种流行的开源文档型数据库,以其强大的查询语言、高性能和灵活性著称。它支持类似于面向对象的查询语法,可以处理大规模数据并提供比传统关系数据库如MySQL更高的查询效率。在MongoDB中,常见的操作包括...

    PHP简单操作MongoDB的方法(安装及增删改查)

    例如,查找age字段大于25且小于40的文档,并且只返回name字段。 - 更新操作:使用update方法可以更新符合条件的文档。例如,可以更新age为22的文档,将name字段更新为"demoxixi"。 需要注意的是,在使用PHP进行...

    mongodb增删改查详解_动力节点Java学院整理

    例如,插入一个包含姓名和年龄的文档: ```javascript db.users.insert({name: "John Doe", age: 30}); ``` #### 批量插入 对于批量插入,虽然mongo shell不直接支持,但可以通过编写循环或使用语言驱动程序(如...

    mongo查询语法.docx

    例如,要查找`field`字段值大于`value`的文档,可以使用`db.collection.find({ "field" : { $gt: value } })`。同样,可以组合使用这些操作符来构造更复杂的查询,如`db.collection.find({ "field" : { $gt: value1,...

    mongo中模糊查询使用和QueryOperators参考.pdf

    假设我们有一个`tags`字段,是一个包含字符串的数组,想要找到所有包含"mongodb"和"query"标签的文档: ```javascript db.documents.find({ tags: { $all: ["mongodb", "query"] } }) ``` 在MongoDB中插入数组或...

    Java操作mongo

    例如,查找所有年龄大于25岁的用户: ```java FindIterable<Document> iterable = collection.find(new Document("age", new Document("$gt", 25))); for (Document result : iterable) { System.out.println...

    Laravel开发-fileserver

    MongoDB 是一个基于分布式文件存储的文档数据库,它支持 JSON 样式的文档,具有灵活的数据模型,适合处理大量数据。GridFS 是 MongoDB 提供的一种存储和检索大于 16MB 文件的解决方案,它将文件分成多个“块”存储,...

    mongo中模糊查询使用和QueryOperators[整理].pdf

    除此之外,MongoDB的QueryOperators提供了许多其他高级查询功能,如`$gt`(大于)、`$lt`(小于)、`$in`(在列表中)、`$elemMatch`(匹配数组中的元素)等。例如,如果你想找到年龄大于20岁的用户,可以这样写: ...

Global site tag (gtag.js) - Google Analytics