MongoDB - 在连接字段上包含(LIKE)查询

时间:2012-09-17 20:55:34

标签: mongodb mongodb-query

我是MongoDB的新手。

我使用spring数据和mongodb编写应用程序,我有一个包含两个字段的类:firstnamelastname

我需要对包含全名(firstname + lastname)中的一个字符串的文档进行一次查询。

例如:firstname = "Hansen David"lastname = "Gonzalez Sastoque"我有一个查询David Gonzalez的查询。在这个例子中,我希望有一个匹配。

连接两个字符串解决了它,但我不知道如何执行此操作。

3 个答案:

答案 0 :(得分:5)

在文档中创建一个新的数组字段(称之为names),并在该数组中将每个名称按空格分割。在您的示例中,数组将具有以下内容:

  1. 汉森
  2. 大卫
  3. 冈萨雷斯
  4. sastoque
  5. (使它们全部小写以防止不区分大小写的问题)

    在进行查询之前,将输入转换为小写并将其拆分为空格。

    现在,您可以使用$all operator来实现目标:

    db.persons.find( { names: { $all: [ "david", "gonzalez" ] } } );
    

答案 1 :(得分:2)

您可以在查询中使用$where修饰符:

db.users.findOne({$where: %JavaScript to match the document%})

在您的情况下,它可能如下所示:

db.users.findOne({$where: "this.firstname + ' ' + this.lastname == 'Gonzalez Sastoque'"})

或者这个:

db.users.findOne({$where: "this.firstname.match(/Gonzalez/) && this.lastname.match(/Sastoque/)"})

我的上一个例子完全符合您的要求。

更新:请尝试以下代码:

db.users.findOne({$where: "(this.firstname + ' ' + this.lastname).match('David Gonzalez'.replace(' ', '( .*)? '))"})

答案 2 :(得分:0)

您应该将全名拆分为名字和姓氏,然后使用相应的MongoDB查询选择器对这两个字段进行查询。