2012-03-01 195 views
0

我有与嵌套字段的记录,像一个DB:蒙戈查询

"requestParams" : { "query" : [ "tv9" ] } 

我使用下面的查询来获取这些类型的记录。不过,我正在寻找一个更常见的情况,其中字段查询匹配/ tv9 /其中包含tv9作为任何搜索的一部分。喜欢的话也应该返回livetv9,movietv9等下面的查询似乎不工作:

db.requestLog.findOne({url : /search.json/, requestParams: {$elemMatch: {query: /tv9/}}}) 

回答

1

$ elemMatch用于匹配数组内的部分文档元素。既然你想直接匹配一个字符串,使用这个运算符是不合适的。用这个代替:

db.requestLog.findOne({url : /search.json/, 'requestParams.query': /tv9/}) 

例子:

mongos> db.test.save({r:{q:["tv9"]}}) 
mongos> db.test.save({r:{q:["tv"]}}) 
mongos> db.test.save({r:{q:["ltv9l"]}}) 
mongos> db.test.find({'r.q':/tv9/}) 
{ "_id" : ObjectId("4f5095d4ec991a74c16ba862"), "r" : { "q" : [ "tv9" ] } } 
{ "_id" : ObjectId("4f5095deec991a74c16ba864"), "r" : { "q" : [ "ltv9l" ] } } 
+0

我厌倦了这一点,当我用我前面贴吧返回16,但我想有TV9作为子这意味着所有的串查询返回null但是输出应该> 16 – 2012-03-02 04:56:08

+0

我提到的查询绝对有效,如果你的例子是正确的。我会用这个例子来扩展我的答案。 – 2012-03-02 09:40:30