2012-03-01 261 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