如何查找以特定数字开头的所有文档

时间:2017-06-28 23:41:47

标签: mongodb mongodb-query aggregation-framework nosql

{
    "_id":ObjectId("92837261829"),
    "num":12
}
{
    "_id":ObjectId("d4372643229"),
    "num":25
}

获取文档的mongodb语法是什么" num"以1开头。

注意" num"中的值是一个不是字符串的数字。所以我猜db.collectionName.find({" num":{$ regex:/ 1。* /}})或类似的东西可能无效。

语法的输出应为

{
"_id":ObjectId("92837261829"),
"num":12
}

1 个答案:

答案 0 :(得分:1)

您实际上可以检查第一个字符的$substr以查看它是否匹配:

db.collection.aggregate([
   { "$redact": {
     "$cond": {
       "if": { "$eq": [ { "$substr": [ "$num", 0, 1 ] }, "1" ] },
       "then": "$$KEEP",
       "else": "$$PRUNE"
     }
   }}
])

逻辑条件发送到$redact$substrCP使用"三元"从结果中将操作转移到$$KEEP$$PRUNE文档。

来自MongoDB 3.4,应该替换为$substrBytes$substrBytes,因为前一个运算符已被弃用,现在别名为$where

或者你可以用http://docs.ansible.com/ansible/lineinfile_module.html做同样的事情,虽然由于JavaScript评估有点慢:

db.collection.find(function() {
  return this.num.toString().substr(0,1) === "1";
})

请注意,这两种方法都在进行计算,因此必须扫描整个集合才能获得结果。因此,在生产环境中,这不是一个实际的操作。

在生产中,最好将这样的东西存储为单独的属性,然后您可以直接查询它并利用和索引来加速搜索结果。