【问题标题】:Mongo DB ,how to do find with a field contains an integerMongodb,如何查找包含整数的字段
【发布时间】:2016-04-13 14:49:08
【问题描述】:

我的收藏是这样的

Name : "name" Serial:"100" Name : "name1" Serial:"4200" Name : "name2" Serial:"1200"

我需要查找包含 Name 且包含值 "name"Serial 包含 "200" 的文档

非常感谢您的指导。

【问题讨论】:

    标签: mongodb-php


    【解决方案1】:

    如果你有这样的数据:

    { "_id" : ObjectId("..."), "name" : "nameA", "serial" : 1200 }
    { "_id" : ObjectId("..."), "name" : "nameB", "serial" : 1234 }
    { "_id" : ObjectId("..."), "name" : "nameC", "serial" : 4200 }
    

    如果你想用正则表达式查询字段serial,你可以做聚合:

    db.coll.aggregate(
        {$project: {name: true, serial: {$toLower: '$serial'}}}, 
        {$match: {serial: /20/}})
    )
    // { "_id" : ObjectId("..."), "name" : "nameA", "serial" : "1200" }
    // { "_id" : ObjectId("..."), "name" : "nameC", "serial" : "4200" }
    
    db.coll.aggregate(
        {$project: {name: true, serial: {$toLower: '$serial'}}}, 
        {$match: {serial: /12/}})
    )
    // { "_id" : ObjectId("..."), "name" : "nameA", "serial" : "1200" }
    // { "_id" : ObjectId("..."), "name" : "nameB", "serial" : "1234" }
    

    但这是一个 hack,我不会在我的工作中使用这种方法。也许有办法重新组织你的数据结构?

    而且你必须知道你不能在这个查询中使用任何索引,mongo 会做全表扫描。

    希望我正确理解了您的问题;)。

    【讨论】:

    • 它没有给我更好的解决方案。示例如下 > db.Legacy_details.findOne() --------Collection { "_id" : ObjectId("573d8f​​5eeb55cc97e9c07aa5"), “阵列”:290103590,“设备”:“10000000c987856d”,“主机”:“”} > db.Legacy_details.find({"Array":"290103590"}) > db.Legacy_details.find({"Array": /290103590/}) >
    • 对不起,我不明白你的问题。如果您只想查找字符串的一部分,请使用正则表达式,我知道您对此有所了解。如果你需要析取,然后像我一样使用$or
    • 好吧,我想我明白了,如果没有请纠正我。你有一个 int 字段,你需要部分匹配吗?好的,我可以建议你使用聚合函数。首先,您应该将 int 值转换为字符串,然后在查询中匹配它。要将整数转换为字符串,只需使用修饰符 $toLower
    • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 回答问题的额外上下文将显着改善其长期价值。请edit你的答案添加一些解释。
    • @evilive 很高兴看到周围的工作,你能给我一个示例语法吗,因为我尝试了几种方法,但都无法成功
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 2021-12-25
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 2022-09-22
    相关资源
    最近更新 更多