복붙노트

[MONGODB] 특정 값을 포함하는 배열 문서를 찾기

MONGODB

특정 값을 포함하는 배열 문서를 찾기

나는이 스키마가있는 경우 ...

person = {
    name : String,
    favoriteFoods : Array
}

... favoriteFoods 어레이 스트링 채워된다. 어떻게 몽구스를 사용하여 자신이 좋아하는 음식으로 "스시"가 모든 사람을 찾을 수 있습니까?

나는의 라인을 따라 뭔가를 기대했다 :

PersonModel.find({ favoriteFoods : { $contains : "sushi" }, function(...) {...});

(난 그냥 솔루션을 알고 전에 찾을 기대하고 있었는지 설명, 더 $가 MongoDB를에 포함하지 않는다 있다는 것을 알고)

해결법

  1. ==============================

    1.favouriteFoods으로 문자열의 간단한 배열입니다, 당신은 단지 해당 필드를 직접 조회 할 수 있습니다 :

    favouriteFoods으로 문자열의 간단한 배열입니다, 당신은 단지 해당 필드를 직접 조회 할 수 있습니다 :

    PersonModel.find({ favouriteFoods: "sushi" }, ...);
    

    그러나 나는 또한 당신의 스키마에 명시 적 문자열 배열을 권하고 싶습니다 :

    person = {
        name : String,
        favouriteFoods : [String]
    }
    

    관련 문서는 여기에서 찾을 수 있습니다 : https://docs.mongodb.com/manual/tutorial/query-arrays/

  2. ==============================

    2.더 $가 MongoDB를에서 연산자를 포함하지 있습니다.

    더 $가 MongoDB를에서 연산자를 포함하지 있습니다.

    당신은이 작품으로 JohnnyHK에서 답을 사용할 수 있습니다. 가장 가까운 비유 몽고가에서 $처럼 보일 것이 쿼리를 사용하고 있는지 포함

    PersonModel.find({ favouriteFoods: { "$in" : ["sushi"]} }, ...);
    
  3. ==============================

    3.나는이 상황에서 더 적합 할 것입니다 $ 모두 같은 느낌. 당신이 스시로하는 사람을 찾고 있다면 당신이 할 :

    나는이 상황에서 더 적합 할 것입니다 $ 모두 같은 느낌. 당신이 스시로하는 사람을 찾고 있다면 당신이 할 :

    PersonModel.find({ favoriteFood : { $all : ["sushi"] }, ...})
    

    당신과 같이 더 많은 검색을 필터링 할 수 있습니다으로 :

    PersonModel.find({ favoriteFood : { $all : ["sushi", "bananas"] }, ...})
    

    달러 것은 또는 같은과 같은 $ 모든 AND입니다. 이 옵션을 선택합니다 : https://docs.mongodb.com/manual/reference/operator/query/all/

  4. ==============================

    4.favouriteFoods 다음 중 오브젝트의 배열 인 경우 경우 어레이는, 예를 들면 객체를 포함한다 :

    favouriteFoods 다음 중 오브젝트의 배열 인 경우 경우 어레이는, 예를 들면 객체를 포함한다 :

    {
      name: 'Sushi',
      type: 'Japanese'
    }
    

    다음과 같은 쿼리를 사용할 수 있습니다 :

    PersonModel.find({"favouriteFoods.name": "Sushi"});
    
  5. ==============================

    5.당신이 하위 문서의 배열 내부 NULL 요소를 포함하는 문서를 찾을 필요가 경우에, 나는 꽤 잘 작동이 쿼리를 발견했습니다 :

    당신이 하위 문서의 배열 내부 NULL 요소를 포함하는 문서를 찾을 필요가 경우에, 나는 꽤 잘 작동이 쿼리를 발견했습니다 :

    db.collection.find({"keyWithArray":{$elemMatch:{"$in":[null], "$exists":true}}})
    

    이 쿼리는이 게시물에서 가져옵니다 : 널 (null) 값으로 MongoDB의 쿼리 배열을

    그것은 위대한 발견이었다 그것은 (하나 개의 요소와 배열을 위해 잘 작동으로 밝혀졌다) 내 자신의 초기 및 잘못된 버전보다 훨씬 더 잘 작동 :

    .find({
        'MyArrayOfSubDocuments': { $not: { $size: 0 } },
        'MyArrayOfSubDocuments._id': { $exists: false }
    })
    
  6. ==============================

    6.비록 찾기에 동의 () 당신의 쓰임새에 가장 효과적입니다. 아직 집계 프레임 워크의 $ 일치하는 결과의 낮은 숫자를 항목의 큰 수의 쿼리를 완화하고 생성, 존재입니다 특히 그룹화하고 새 파일을 만들기위한 당신에게 홀드 값.

    비록 찾기에 동의 () 당신의 쓰임새에 가장 효과적입니다. 아직 집계 프레임 워크의 $ 일치하는 결과의 낮은 숫자를 항목의 큰 수의 쿼리를 완화하고 생성, 존재입니다 특히 그룹화하고 새 파일을 만들기위한 당신에게 홀드 값.

  7. ==============================

    7.lookup_food_array 넣다의 배열이다.

    lookup_food_array 넣다의 배열이다.

    match_stage["favoriteFoods"] = {'$elemMatch': {'$in': lookup_food_array}}
    

    lookup_food_array의 넣다은 문자열입니다.

    match_stage["favoriteFoods"] = {'$elemMatch': lookup_food_string}
    
  8. ==============================

    8.Loopback3를 들어 주어진 모든 예제는 또는 빨리 어쨌든 REST API를 사용하는 등, 나를 위해 일을하지 않았다. 하지만 내가 필요로하는 정확한 답을 알아 내기 위해 저를 도왔다.

    Loopback3를 들어 주어진 모든 예제는 또는 빨리 어쨌든 REST API를 사용하는 등, 나를 위해 일을하지 않았다. 하지만 내가 필요로하는 정확한 답을 알아 내기 위해 저를 도왔다.

    { "": { "arrayAttribute": { "모든": [문자열]}}}

  9. ==============================

    9.당신은 자바 스크립트를 통해 연산자를 "포함"같은 것을 사용하려는 싶다면, 당신은 항상을위한 정규 표현식을 사용할 수 있습니다 ...

    당신은 자바 스크립트를 통해 연산자를 "포함"같은 것을 사용하려는 싶다면, 당신은 항상을위한 정규 표현식을 사용할 수 있습니다 ...

    예를 들면. 당신이 이름으로 "Bartolomew"을 갖는 고객을 검색 할 말

    async function getBartolomew() {
        const custStartWith_Bart = await Customers.find({name: /^Bart/ }); // Starts with Bart
        const custEndWith_lomew = await Customers.find({name: /lomew$/ }); // Ends with lomew
        const custContains_rtol = await Customers.find({name: /.*rtol.*/ }); // Contains rtol
    
        console.log(custStartWith_Bart);
        console.log(custEndWith_lomew);
        console.log(custContains_rtol);
    }
    
  10. ==============================

    10.이 주제는 오래 알고 있지만 같은 질문을 궁금해 수있는 미래의 사람들을 위해, 또 다른 매우 비효율적 인 솔루션은 할 수 :

    이 주제는 오래 알고 있지만 같은 질문을 궁금해 수있는 미래의 사람들을 위해, 또 다른 매우 비효율적 인 솔루션은 할 수 :

    PersonModel.find({$where : 'this.favouriteFoods.indexOf("sushi") != -1'});
    

    이 MongoDB의 모든 최적화 그렇게 생산 코드에 사용하지 않는 피한다.

  11. from https://stackoverflow.com/questions/18148166/find-document-with-array-that-contains-a-specific-value by cc-by-sa and MIT license