请求帮助修复这个mongoDb/mongoose查询。它应该做到:
示例文档:
{
"_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})
问题:只返回找到的第一个对象。
发布于 2020-01-27 18:14:05
你可以试试这个:
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
。
https://stackoverflow.com/questions/59936219
复制相似问题