이 mongoDb / mongoose 쿼리를 수정하기 위해 도움을 요청합니다. 해야합니다 :
'호스트'의 배열 요소 수량 평가
2 개 이상의 요소가있는 문서 만 배열로 반환
마지막으로 쿼리는 위의 매개 변수를 따르는 모든 필드가있는 DB의 모든 문서 / 객체를 반환해야합니다.
샘플 문서 :
{
"_id" : ObjectId("XXXXXXXXX"),
"content" : "ASdkJAHKDA",
"time" : ISODate("2020-01-24T17:20:00.023Z"),
"sentEmail" : {
"host" : [
"smtp.XXX",
"smtp.YYYY",
],
"status" : false,
"date" : ISODate("2020-01-27T14:36:08.311Z",
}
시도 1 :
db.getCollection('emails').find({'sentEmail.status': false}, {$where:'sentEmail.host >= 2'})
문제점 : 모든 필드를 반환하지 않고 ID 만 반환
시도 2 :
db.getCollection('emails').find({'sentEmail.host.1': {$exists:true}, 'sentEmail.status': false})
문제 : 발견 된 첫 번째 개체 만 반환합니다.
이것을 시도 할 수 있습니다.
db.getCollection('emails').find({$expr :{$and : [{$eq :['$sentEmail.status', false]},
{$gte: [{$size:'$sentEmail.host'},2]}]}})
수집 데이터 :
/* 1 */
{
"_id" : ObjectId("5e2f26ead02e05b6948bc302"),
"content" : "ASdkJAHKDA",
"time" : ISODate("2020-01-24T17:20:00.023Z"),
"sentEmail" : {
"host" : [
"smtp.XXX",
"smtp.YYYY"
],
"status" : false,
"date" : ISODate("2020-01-27T14:36:08.311Z")
}
}
/* 2 */
{
"_id" : ObjectId("5e2f26f1d02e05b6948bc3b5"),
"content" : "ASdkJAHKDA",
"time" : ISODate("2020-01-24T17:20:00.023Z"),
"sentEmail" : {
"host" : [
"smtp.YYYY"
],
"status" : false,
"date" : ISODate("2020-01-27T14:36:08.311Z")
}
}
/* 3 */
{
"_id" : ObjectId("5e2f26ffd02e05b6948bc4c8"),
"content" : "ASdkJAHKDA",
"time" : ISODate("2020-01-24T17:20:00.023Z"),
"sentEmail" : {
"host" : [
"smtp.XXX",
"smtp.YYYY",
"smtp.ZZZZ"
],
"status" : false,
"date" : ISODate("2020-01-27T14:36:08.311Z")
}
}
/* 4 */
{
"_id" : ObjectId("5e2f2bd2d02e05b6948c2c58"),
"content" : "ASdkJAHKDA",
"time" : ISODate("2020-01-24T17:20:00.023Z"),
"sentEmail" : {
"host" : [
"smtp.XXX",
"smtp.YYYY",
"smtp.ZZZZ"
],
"status" : true,
"date" : ISODate("2020-01-27T14:36:08.311Z")
}
}
결과 :
/* 1 */
{
"_id" : ObjectId("5e2f26ead02e05b6948bc302"),
"content" : "ASdkJAHKDA",
"time" : ISODate("2020-01-24T17:20:00.023Z"),
"sentEmail" : {
"host" : [
"smtp.XXX",
"smtp.YYYY"
],
"status" : false,
"date" : ISODate("2020-01-27T14:36:08.311Z")
}
}
/* 2 */
{
"_id" : ObjectId("5e2f26ffd02e05b6948bc4c8"),
"content" : "ASdkJAHKDA",
"time" : ISODate("2020-01-24T17:20:00.023Z"),
"sentEmail" : {
"host" : [
"smtp.XXX",
"smtp.YYYY",
"smtp.ZZZZ"
],
"status" : false,
"date" : ISODate("2020-01-27T14:36:08.311Z")
}
}
경우에 문서를 반환하지 않은 "_id" : ObjectId("5e2f26f1d02e05b6948bc3b5")
크기 때문에 sentEmail.host < 2
&&가 "_id" : ObjectId("5e2f2bd2d02e05b6948c2c58")
가가 원인 반환되지 않습니다 sentEmail.status: true
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다