[MONGODB] MongoDB의 중첩 배열 쿼리
MONGODBMongoDB의 중첩 배열 쿼리
나는 또 다른 질문에 주석으로이 물었다, 또한 MongoDB를 사용자의 질문을 게시했습니다. 어떤 응답은 지금까지, 그래서 별도의 질문을에 의존하지거야.
문서 상태 :
내가 사용하고 있습니다 :
mongod --version:
db version v2.2.2, pdfile version 4.5
Thu May 30 12:19:12 git version: d1b43b61a5308c4ad0679d34b262c5af9d664267
mongo --version:
MongoDB shell version: 2.0.4
MongoDB의에서 쉘 :
db.nested.insert({'level1': {'level2': [['item00', 'item01'], ['item10', 'item11']]}})
다음은 설명서에 따라 작동합니다 쿼리 및 그들이 생산 결과의 목록은 다음과 같습니다
왜이 작동합니까?
> db.nested.findOne({'level1.level2.0': 'item00'})
null
이유는 $ 모든 필요합니까?
> db.nested.findOne({'level1.level2.0': {'$all': ['item00']}})
{
"_id" : ObjectId("51a7a4c0909dfd8872f52ed7"),
"level1" : {
"level2" : [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
]
}
}
다음 중 하나 이상에서 잘 작동합니다?
> db.nested.findOne({'level1.level2.0': {'$in': ['item00']}})
null
> db.nested.findOne({'level1.level2': {'$in': ['item00']}})
null
어떤 아이디어? 우리는 광고로 쿼리 구문이 작동하지 않는 경우 MongoDB를 포기 고려하고 있습니다.
감사!
해결법
-
==============================
1.일부 쿼리를 실행 한 후, 나는에이 배열의 배열 작동하지 않습니다 $ 있다는 결론에 도달했다.
일부 쿼리를 실행 한 후, 나는에이 배열의 배열 작동하지 않습니다 $ 있다는 결론에 도달했다.
대신 $ elemMatch를 사용할 수 있으며 작동합니다,하지만 MongoDB의 설명서 그것에 대해 경고하지 않습니다 실망.
나는이 문서를 만든 :
{ "_id": "51cb12857124a215940cf2d4", "level1": [ [ "item00", "item01" ], [ "item10", "item11" ] ], "items": [ "item20", "item21" ] }
공지 사항 필드 "항목은"문자열 배열이라고이 쿼리는 완벽하게 작동합니다 :
db.nested.findOne({"items":{"$in":["item20"]} })
이제, "level1.0는"유일한 차이점은 다른 배열 안에 있다는 것입니다, 또한 문자열의 배열입니다. 작동해야하지만이 쿼리는되지 않습니다 :
db.nested.findOne({"level1.0":{"$in":["item00"]} })
결과를 얻을 수있는 유일한 방법은 $ elemMatch을 사용하고 있습니다 :
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })
$ elemMatch 문제를 해결하지만, 실제 솔루션은 $에이 배열의 배열에 대한 작업을하지 않는 상태로 MongoDB의 설명서를 업데이트하는 것입니다 그래서. 아마 당신은 10gen에 요청을 제출해야합니다.
-
==============================
2.사용 배열 내에서 중첩 수준을 검색 할 elemMatch 중첩.
사용 배열 내에서 중첩 수준을 검색 할 elemMatch 중첩.
세부 쿼리하여 MongoDB의 배열의 배열
-
==============================
3.짧은 답변 :에 $는 단일 값 필드이며, $ 모든 배열입니다.
짧은 답변 :에 $는 단일 값 필드이며, $ 모든 배열입니다.
첫째, db.nested.findOne ({ 'level1.level2.0': 'item00는'}) level1.level2.0 배열을 보유하고 단일 값과 비교하려고하기 때문에 일을하지 않습니다.
이제 db.nested.findOne ({ 'level1.level2.0'{ '에 $': [ 'item00는']}}) 때문에 비슷한 이유 중 하나가 작동하지 않습니다. 달러 것은 (쿼리에 지정된) 배열의 여러 값을 하나의 값 (당신이 배열을 가지고)와 필드를 비교하는 것입니다. 달러는 말하고있다 : 나에게이 배열에 포함 된 값이 필드를 가지고있는 문서를 제공합니다.
나에게 몇 가지 값 (쿼리)이 배열의 모든 값이 필드가 워드 프로세서 해당 필드에 포함되어 제공 : 말 때문에 모두가 노력하고 있습니다 $. (편집)
얻을 수 있지만, 문서가 각각 말씀을 보면 하드 될 수 있습니다
희망이 도움이
from https://stackoverflow.com/questions/17303833/mongodb-nested-array-query by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 어떻게 같은 성명을 채우고 집계를 사용 하는가? (0) | 2019.12.13 |
---|---|
[MONGODB] mongod를 사용하여 UTC에 날짜를 저장할 때 어떻게 시간대의 문제를 다루는? (0) | 2019.12.13 |
[MONGODB] 어떻게 MongoDB를 내부 목록에 요소를 삽입? (0) | 2019.12.13 |
[MONGODB] MongoDB를에 findOne를 사용하면 최대 ID를 가진 요소를 얻을 수 (0) | 2019.12.13 |
[MONGODB] 문서에서 일부 필드를 제외하는 방법 (0) | 2019.12.13 |