我是MongoDB的新手。
我使用spring数据和mongodb编写应用程序,我有一个包含两个字段的类:firstname
和lastname
。
我需要对包含全名(firstname
+ lastname
)中的一个字符串的文档进行一次查询。
例如:firstname = "Hansen David"
,lastname = "Gonzalez Sastoque"
我有一个查询David Gonzalez
的查询。在这个例子中,我希望有一个匹配。
连接两个字符串解决了它,但我不知道如何执行此操作。
答案 0 :(得分:5)
在文档中创建一个新的数组字段(称之为names
),并在该数组中将每个名称按空格分割。在您的示例中,数组将具有以下内容:
(使它们全部小写以防止不区分大小写的问题)
在进行查询之前,将输入转换为小写并将其拆分为空格。
现在,您可以使用$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查询选择器对这两个字段进行查询。