2012-03-01 2 views
0

내가 좋아하는 중첩 된 필드 레코드가있는 DB를 가지고있다. 그러나 나는 필드 쿼리가/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/}) 

예 : 나는 그것이 16를 반환하지만 난 그 수단 문자열로 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 –

+0

이어야합니다. 내가 언급 한 쿼리는 예제가 정확하다면 분명히 작동합니다. 나는 예제를 가지고 나의 대답을 확장 할 것이다. –

관련 문제