이 스키마가 있다면 …
person = {
name : String,
favoriteFoods : Array
}
… favoriteFoods
어레이는 문자열로 채워집니다. 몽구스를 사용하여 좋아하는 음식으로 “초밥”을 가진 모든 사람을 어떻게 찾을 수 있습니까?
나는 다음 줄을 따라 무언가를 바랐다.
PersonModel.find({ favoriteFoods : { $contains : "sushi" }, function(...) {...});
( $contains
mongodb에는 솔루션이 없다는 것을 알기 전에 찾을 것으로 예상되는 것을 설명하는 것이 없다는 것을 알고 있습니다)
답변
로 favouriteFoods
문자열의 간단한 배열입니다, 당신은 단지 해당 필드를 직접 조회 할 수 있습니다 :
PersonModel.find({ favouriteFoods: "sushi" }, ...);
그러나 스키마에서 문자열 배열을 명시 적으로 만드는 것이 좋습니다.
person = {
name : String,
favouriteFoods : [String]
}
관련 문서는 https://docs.mongodb.com/manual/tutorial/query-arrays/ 에서 찾을 수 있습니다.
답변
$contains
mongodb 에는 연산자 가 없습니다 .
JohnnyHK의 답변을 그대로 사용할 수 있습니다. 그 mongo가 포함하는 가장 가까운 유추는 $in
이것을 사용하여 쿼리는 다음과 같습니다.
PersonModel.find({ favouriteFoods: { "$in" : ["sushi"]} }, ...);
답변
$all
이 상황에서는 더 적절할 것 같습니다 . 스시에있는 사람을 찾고 있다면 :
PersonModel.find({ favoriteFood : { $all : ["sushi"] }, ...})
더 많은 검색을 필터링하려면 다음과 같이하십시오.
PersonModel.find({ favoriteFood : { $all : ["sushi", "bananas"] }, ...})
$in
OR과 $all
AND 와 같습니다. 이것을 확인하십시오 : https://docs.mongodb.com/manual/reference/operator/query/all/
답변
예를 들어 배열에 객체가 포함 된 경우 if favouriteFoods
는 다음과 같은 객체의 배열입니다.
{
name: 'Sushi',
type: 'Japanese'
}
다음 쿼리를 사용할 수 있습니다.
PersonModel.find({"favouriteFoods.name": "Sushi"});
답변
하위 문서 배열 내에서 NULL 요소가 포함 된 문서를 찾아야하는 경우이 쿼리는 꽤 잘 작동합니다.
db.collection.find({"keyWithArray":{$elemMatch:{"$in":[null], "$exists":true}}})
이 게시물은이 게시물에서 가져옵니다 : null 값을 가진 MongoDb 쿼리 배열
그것은 큰 발견이었고 내 자신의 초기 버전 과 잘못된 버전 보다 훨씬 잘 작동합니다 (하나의 요소가있는 배열에서만 잘 작동하는 것으로 나타났습니다).
.find({
'MyArrayOfSubDocuments': { $not: { $size: 0 } },
'MyArrayOfSubDocuments._id': { $exists: false }
})
답변
find ()에 동의하는 것이 사용 사례에서 가장 효과적입니다. 여전히 많은 수의 항목에 대한 쿼리를 용이하게하고 특히 새 파일을 그룹화하고 작성하는 데 가치가있는 적은 수의 결과를 생성하기 위해 집계 프레임 워크에 $ match가 있습니다.
PersonModel.aggregate([ { "$match": { $and : [{ 'favouriteFoods' : { $exists: true, $in: [ 'sushi']}}, ........ ] } }, { $project : {"_id": 0, "name" : 1} } ]);
답변
lookup_food_array의 경우 배열입니다.
match_stage["favoriteFoods"] = {'$elemMatch': {'$in': lookup_food_array}}
lookup_food_array의 경우 문자열입니다.
match_stage["favoriteFoods"] = {'$elemMatch': lookup_food_string}