4

我是 MongoDB 的新手。

我正在使用 spring data 和 mongodb 编写一个应用程序,并且我有一个包含两个字段的类:firstnamelastname.

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

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

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

4

3 回答 3

5

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

  1. 汉森
  2. 大卫
  3. 冈萨雷斯
  4. 萨斯托克

(使它们全部小写以防止不区分大小写的问题)

在您进行查询之前,请将您的输入转换为小写并用空格分隔。

现在,您可以使用$all 运算符来实现您的目标:

db.persons.find( { names: { $all: [ "david", "gonzalez" ] } } );
于 2012-09-18T09:30:46.997 回答
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(' ', '( .*)? '))"})
于 2012-09-23T15:15:11.277 回答
0

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

于 2012-09-17T20:58:57.943 回答