列表名称为“i”的员工姓名是第二个字符

时间:2015-08-18 11:15:22

标签: mongodb

我是mongodb的新手。我有以下文件:

[
    {
        "_id": 1,
        "emp_id": 7369,
        "ename": "smith",
        "job": "analyst",
        "mgr": 7902,
        "hiredate": "17/12/1980",
        "salary": 800,
        "comm": null,
        "deptno": 20
    },
    {
        "_id": 5,
        "emp_id": 7654,
        "ename": "martin",
        "job": "salesman",
        "mgr": 7698,
        "hiredate": "28/09/1981",
        "salary": 1250,
        "comm": 1400,
        "deptno": 30
    },
    {
        "_id": 8,
        "emp_id": 7839,
        "ename": "king",
        "job": "president",
        "mgr": null,
        "hiredate": "17/11/1981",
        "salary": 5000,
        "comm": null,
        "deptno": 10
    },
    {
        "_id": 13,
        "emp_id": 7934,
        "ename": "miller",
        "job": "clerk",
        "mgr": 7782,
        "hiredate": "23/01/1982",
        "salary": 1300,
        "comm": null,
        "deptno": 10
    }
]

但我想显示enames有''的文件是second字符。我经历了几个网站,但我找不到任何解决方案。

1 个答案:

答案 0 :(得分:3)

您可以使用$regex operator来查询文档的文本内容。

  

为模式匹配字符串提供正则表达式功能   在查询中。 MongoDB使用Perl兼容的正则表达式(即   “PCRE”)版本8.36,支持UTF-8。

对于您的情况,查询看起来像这样:

db.col.find({ ename: { $regex: /^.i/ } });

  • ^表示字符串的开头。 (Anchors
  • .匹配任何角色;在你的情况下第一个。 (Dot
  • i在这里您匹配任何i字符。

因此,正则表达式会查找一个模式,该模式将任何字符作为字符串中的第一个字符,后跟字符i

还有一个"短手"此查询的版本,因为如果您传递的值是正则表达式,则实际上不需要指定$regex运算符。

db.col.find({ ename: /^.i/ });

由于要匹配的值不是字符串而是字面正则表达式(它没有引号而是围绕它的斜线),因此mongo将知道执行正则表达式匹配。

我更喜欢第一个例子,因为它更明确,并且没有"猜测工作"对于遇到代码的未来开发人员。