Mongoose: aggregate를 함께 사용하는 방법
Aggregate를 사용하는 방법과find
몽구스에서 함께?
즉, 다음과 같은 스키마가 있습니다.
const schema = new Mongoose.Schema({
created: { type: Date, default: Date.now() },
name: { type: String, default: 'development' }
followers: [{ type: Mongoose.Schema.ObjectId, ref: 'Users'}]
...
})
export default Mongoose.model('Locations', schema)
필드만 사용하여 사용자를 쿼리하려면 어떻게 해야 합니까?name
그리고.followers_count
.
followers_count
의 길이followers
.
선택을 사용하여 필드만 가져올 수 있습니다.name
.
어떻게 하면 세어 볼 수 있을까요?followers
?
MongoDB 3.6 이상의 경우 쿼리 언어 내에서 집계 식을 사용할 수 있는 연산자를 사용합니다.
var followers_count = 30;
db.locations.find({
"$expr": {
"$and": [
{ "$eq": ["$name", "development"] },
{ "$gte": [{ "$size": "$followers" }, followers_count ]}
]
}
});
호환되지 않는 버전의 경우 및 파이프라인을 모두 사용하여 컬렉션을 쿼리할 수 있습니다.예를 들어, 다음을 쿼리하려는 경우locations
이름이 '개발'인 컬렉션followers_count
30보다 크면 다음 집계 작업을 실행합니다.
const followers_count = 30;
Locations.aggregate([
{ "$match": { "name": "development" } },
{
"$redact": {
"$cond": [
{ "$gte": [ { "$size": "$followers" }, followers_count ] },
"$$KEEP",
"$$PRUNE"
]
}
}
]).exec((err, locations) => {
if (err) throw err;
console.log(locations);
})
또는 단일 파이프라인 내에서
Locations.aggregate([
{
"$redact": {
"$cond": [
{
"$and": [
{ "$eq": ["$name", "development"] },
{ "$gte": [ { "$size": "$followers" }, followers_count ] }
]
},
"$$KEEP",
"$$PRUNE"
]
}
}
]).exec((err, locations) => {
if (err) throw err;
console.log(locations);
})
위의 내용은 다음과 같이 위치를 반환합니다._id
사용자로부터의 참조.팔로어 배열을 "채우기" 위한 수단으로 사용자 문서를 반환하려면 파이프라인을 추가할 수 있습니다.
기본 Mongo 서버 버전이 3.4 이상인 경우 다음과 같이 파이프라인을 실행할 수 있습니다.
let followers_count = 30;
Locations.aggregate([
{ "$match": { "name": "development" } },
{
"$redact": {
"$cond": [
{ "$gte": [ { "$size": "$followers" }, followers_count ] },
"$$KEEP",
"$$PRUNE"
]
}
},
{
"$lookup": {
"from": "users",
"localField": "followers",
"foreignField": "_id",
"as": "followers"
}
}
]).exec((err, locations) => {
if (err) throw err;
console.log(locations);
})
그렇지 않으면 적용하기 전에 팔로어 배열을 변경한 후 파이프라인으로 다시 그룹화해야 합니다.
let followers_count = 30;
Locations.aggregate([
{ "$match": { "name": "development" } },
{
"$redact": {
"$cond": [
{ "$gte": [ { "$size": "$followers" }, followers_count ] },
"$$KEEP",
"$$PRUNE"
]
}
},
{ "$unwind": "$followers" },
{
"$lookup": {
"from": "users",
"localField": "followers",
"foreignField": "_id",
"as": "follower"
}
},
{ "$unwind": "$follower" },
{
"$group": {
"_id": "$_id",
"created": { "$first": "$created" },
"name": { "$first": "$name" },
"followers": { "$push": "$follower" }
}
}
]).exec((err, locations) => {
if (err) throw err;
console.log(locations);
})
다음과 같이 사용할 수 있습니다.
db.locations.aggregate([
{$match:{"your find query"}},
{$project:{"your desired fields"}}
])
이 게임에서 다음과 같은 작업을 수행할 수 있습니다.
{{$match:{name:"whatever"}}
프로젝트에서 다음과 같이 숫자 0 또는 1을 사용하여 원하는 필드를 선택할 수 있습니다.
{$project:{_id:1,created:0,name:1}}
즉, 0은 넣지 않음을 의미하고 1은 넣음을 의미합니다.
언급URL : https://stackoverflow.com/questions/42394902/mongoose-how-to-use-aggregate-and-find-together
'programing' 카테고리의 다른 글
bash에서 wc에서 정수만 가져옵니다. (0) | 2023.05.06 |
---|---|
iOS 시뮬레이터에서 스크린샷 찍기 (0) | 2023.05.06 |
Azure Blob 400 컨테이너 생성 시 잘못된 요청. (0) | 2023.05.06 |
mongo에서 수퍼유저 만들기 (0) | 2023.05.01 |
IIS에서 사이트를 시작할 수 없음(다른 프로세스에서 사용) (0) | 2023.05.01 |