MongoDB에서 여러 필드에서 여러 값 검색
특정 문자열이 여러 필드에 나타날 수 있는 MongoDB 컬렉션이 있습니다.
{"_id":1, "field1": "foo", "field2": "bar", "field3": "baz", "otherfield": "stuff"},
{"_id":2, "field1": "bar", "field2": "baz", "field3": "foo", "otherfield": "morestuff"},
{"_id":3, "field1": "baz", "field2": "foo", "field3": "bar", "otherfield": "you get the idea"}
필드 집합 중 하나가 배열의 값과 동일한 모든 레코드를 반환하도록 쿼리해야 합니다... 기본적으로, 만약 내가["foo","bar"]
이 문자열 중 하나가 필드 1 또는 필드 2에 있는지 일치해야 합니다(다른 필드는 아님).
분명히 나는 이것을 일련의 여러 쿼리로 할 수 있습니다.
db.collection.find({"field1":{"$in":["foo","bar"]}})
db.collection.find({"field2":{"$in":["foo","bar"]}})
등, 그리고 저는 또한 모든 것을 연결하는 매우 큰 $ 또는 쿼리를 만들었지만, 너무 비효율적인 것 같습니다(실제 컬렉션은 9개 필드 중 하나에서 발생할 수 있는 15개 문자열과 일치해야 합니다). 하지만 저는 아직 nosql DB에 익숙하지 않아서 여기서 사용해야 할 최고의 패러다임을 확신할 수 없습니다.어떤 도움이든 대단히 감사합니다.
해라
db.collection.find(
// Find documents matching any of these values
{$or:[
{"field1":{"$in":["foo","bar"]}},
{"field2":{"$in":["foo","bar"]}}
]}
)
또한 이 질문을 참조하십시오.
최적의 위치에 도달한 것처럼 보이는 문서를 자세히 살펴봄으로써 또 다른 답을 찾았습니다. 바로 텍스트 색인입니다.
db.collection.ensureIndex({"field1":"text","field2":"text"})
db.records.runCommand("text",{search:"foo bar"})
더 많은 문자열과 필드(및 약 100,000개의 레코드)로 실제 쿼리를 실행하면$or/$in
접근에는 620밀리초가 걸리는 반면 텍스트 색인에는 131밀리초가 걸립니다.한 가지 단점은 결과적으로 다른 유형의 문서를 반환한다는 것입니다. 운 좋게도 실제 문서는 각 결과 개체의 매개 변수입니다.
시간을 내어 제안을 해주신 분들께 감사드립니다.
모든 관련 분야를 한 분야에 수집합니다.collected
)와 같은 그들의 가치를 더함으로써.
"foo:field1",
"bar:field2",
"baz:field3",
"stuff:otherfield",
"bar:field1",
"baz:field2"
...
그 들판으로.
검색할 경우bar
사용할 수 있는 모든 필드에 존재합니다.
db.collection.find( { collected: { $regex: "^bar" } }, ... );
질문의 예는 다음과 같습니다.
db.collection.find( collected: { { $all: [ "foo:field1", "foo:field2", "bar:field1", "bar:field2" ] } }, ... );
언급URL : https://stackoverflow.com/questions/21417711/search-multiple-fields-for-multiple-values-in-mongodb
'source' 카테고리의 다른 글
json_decode()를 사용하여 개체 대신 배열을 만듭니다. (0) | 2023.05.24 |
---|---|
Xcode에서 기존/미사용 데이터 모델 버전을 삭제하는 방법 (0) | 2023.05.24 |
빠른 패스 바이 값 또는 패스 바이 레퍼런스 (0) | 2023.05.24 |
셸 명령에서 "&&"의 목적은 무엇입니까? (0) | 2023.05.24 |
경고:동일한 종속 어셈블리의 서로 다른 버전 간에 충돌이 발견되었습니다. (0) | 2023.05.24 |