는 현재 $elemMatch
를 사용 조건이 "B"와 "C"와 요소 모두에 해당하기 때문에
var start = "B",
end = "C";
db.getCollection('nest').find({
"points": {
"$elemMatch": {
"point": { "$gte": start, "$lte": end }
}
}
})
문서를 선택겠습니까, 그러나 순서를 반대로 없음 요소 "B"에 작거나 같은 값 모두 크거나 같다 "C"도 만족이 없기 때문에
var start = "C",
end = "B";
db.getCollection('nest').find({
"points": {
"$elemMatch": {
"point": { "$gte": start, "$lte": end }
}
}
})
조건은 어떤 배열 요소 사실이 아니다.
이렇게 주문을 시행하는 방법이며, 데이터 자체가 항상 그런 식으로 주문되어있는 한 괜찮습니다.
당신은 그 자체가 역에 표시되는 데이터가있는 경우 :
{
_id: "my tour",
points: [
{_id: '4', point: 'D'},
{_id: '3', point: 'C'},
{_id: '2', point: 'B'},
{_id: '1', point: 'A'}
]
}
그리고 당신은 앞으로 "배열 인덱스"에 의해 진행을 나타내는 "B"에서 "C"와 마지막에 "시작"하고 싶어, 다음을
var start = "B",
end = "C";
db.getCollection('nest').aggregate([
{ "$match": {
"points.point": { "$all": [start,end] }
}},
{ "$redact": {
"$cond": {
"if": {
"$and": [
{ "$gt": [
{ "$indexOfArray": [ "$points.point", start ] },
{ "$indexOfArray": [ "$points.point", end ] },
]}
]
},
"then": "$$KEEP",
"else": "$$PRUNE"
}
}}
])
그래서 여기에 최고의 조언 배열하면 계산으로 할 수 있지만, 원시 쿼리가 훨씬 더 성능이 좋은이기 때문에 즉, 어휘 범위에 대한 검색이 주문한 유지하는 것입니다 : 당신은 계산 된 진술이 필요합니다.
무엇을 시도 했습니까? . – Wndrr
db.getCollection ('여행') 집계 ([ { $ 일치 : { '점': { $ elemMatch : {$와 [ { 국가 '미국', 점 : '598c156bfd081c2ca0d82319' }, 는 { 국가 '미국', 점 : '598c156bfd081c2ca0d82335' }, ]} } } } – thankdev