首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDB :获取数组>= 2长度的文档

MongoDB :获取数组>= 2长度的文档
EN

Stack Overflow用户
提问于 2020-01-27 17:38:34
回答 1查看 82关注 0票数 1

请求帮助修复这个mongoDb/mongoose查询。它应该做到:

  • 计算“主机”
  • 的数组元素的数量,只将包含两个以上元素的文档返回到数组
  • 中,最后,查询应该返回数据库的所有文档/对象,所有字段都遵循上面的公式。

示例文档:

代码语言:javascript
运行
复制
{
    "_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 :

代码语言:javascript
运行
复制
db.getCollection('emails').find({'sentEmail.status': false}, {$where:'sentEmail.host >= 2'})

问题:不是返回所有字段,而是只返回ID

尝试2 :

代码语言:javascript
运行
复制
db.getCollection('emails').find({'sentEmail.host.1': {$exists:true}, 'sentEmail.status': false})

问题:只返回找到的第一个对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-27 18:14:05

你可以试试这个:

代码语言:javascript
运行
复制
db.getCollection('emails').find({$expr :{$and : [{$eq :['$sentEmail.status', false]},
                                            {$gte: [{$size:'$sentEmail.host'},2]}]}})

收集数据:

代码语言:javascript
运行
复制
/* 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")
    }
}

结果:

代码语言:javascript
运行
复制
/* 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59936219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档