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"
		]
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值