source

MongoDB에서 여러 필드에서 여러 값 검색

nicesource 2023. 5. 24. 22:12
반응형

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

반응형