아래 필드 2 개가있는 내 문서의 복합 키로 _id 필드를 사용하고 있습니다. 내 쿼리에서 함께 두 필드를 사용하는 경우 내가 그것을 발견 무엇 Mongodb _id 필드를 사용하여 하나 이상의 복합 필드에서 부분적으로 쿼리하기
{
"_id" : {
"timestamp" : ISODate("2016-08-25T05:43:00.000-19:30"),
"hostName" : "nj"
}
}
는 난 단지 쿼리 수 있어요. 내가 그 중 하나를 사용하면 나는 어떤 문서도 돌려받지 못한다.
db.getCollection('sales').find(
{
"_id" : {
"hostName" : "tryme"
}
}
db.getCollection('sales').find(
{
"_id" : {
"timestamp" : ISODate("2016-08-25T05:43:00.000-19:30")
}
}
위의 스크립트는 어떤 문서도 반환하지 않습니다.
또한, 나는
db.getCollection('sales').find(
{
"_id" : {
"timestamp" : {
"$lte":ISODate("2016-08-25T04:51:00.000-19:30")
},
"hostName" : "tryme"
}
}
)
은 위의도 모든 문서를 반환하지 않습니다, 날짜 필드에 $ GTE/$의 LTE 연산자를 사용할 수 없습니다입니다.
아래 쿼리는 작동하지만 explain()은 콜렉션 스캔을 사용하고 인덱스는 사용되지 않습니다.
db.getCollection('sales').find(
{
"_id.timestamp" : ISODate("2016-08-25T04:51:00.000-19:30"),
"_id.hostName" : "tryme"
}
)
==
db.getCollection('sales').find(
{
"_id.timestamp" : {
"$gte": ISODate("2016-08-25T04:52:00.000-19:30")
},
"_id.hostName" : "tryme"
}
)
확실하지 않은 경우 어떻게 _id 필드가 올바르게 작동하는지 이해했다면.
기본적으로 복합 쿼리의 부분 필드를 사용할 수 있고 _id 필드의 인덱스를 활용하여 동시에 /보다 큰/작은 것 같은 범위 쿼리에도 날짜 형식 필드를 사용할 수 있기를 원합니다.
누군가 나를 도와주세요.
감사
의견을 보내 주신 데 대해 감사 드리지만 점 스캔을 사용하면 색인을 사용하지 않고 컬렉션 스캔을 수행 할 수 있습니다. mongo 쉘에서 .explain() 메소드를 사용하여 검사했습니다.이 쿼리에 인덱스를 사용하고 싶습니다. – user6594900
@ user6594900 false 인 경우 중첩 인덱스 (https://stackoverflow.com/questions/9730136/how-to-create-a-nested-index-in-mongodb)를 만들 수 있습니다. 복합 색인이있는 경우 해당 색인이 작동하도록하기 위해 모든 구성 요소를 질의해야합니다 – martriay