看以下的文档:
?
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操作符