Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将2个文本字段搜索为1个字段_Javascript_Mongodb_Meteor_Mongodb Query - Fatal编程技术网

Javascript 将2个文本字段搜索为1个字段

Javascript 将2个文本字段搜索为1个字段,javascript,mongodb,meteor,mongodb-query,Javascript,Mongodb,Meteor,Mongodb Query,我将按名称搜索用户,并具有以下属性:firstName和lastName。如果我有一个属性fullName,这将是微不足道的,但我没有它 我想搜索“Peter Robert”,我需要在搜索之前将这两个字段合并为1 我该怎么做呢?听起来基本上像是你想要一份工作。可以跨越多个字段,以便从所有索引字段中搜索输入的术语: db.collection.ensureIndex({“firstName”:“text”,“lastName”:“text”}) db.collection.find({“$text

我将按名称搜索用户,并具有以下属性:
firstName
lastName
。如果我有一个属性
fullName
,这将是微不足道的,但我没有它

我想搜索“Peter Robert”,我需要在搜索之前将这两个字段合并为1


我该怎么做呢?

听起来基本上像是你想要一份工作。可以跨越多个字段,以便从所有索引字段中搜索输入的术语:

db.collection.ensureIndex({“firstName”:“text”,“lastName”:“text”})
db.collection.find({“$text”:{“$search”:“Peter Robert”})
这是处理这个问题的一种方法。也将返回其他比赛,但精确的比赛得分最高,因此您可以对其进行排名

或者,如果您知道您总是以该顺序获得类似“Peter Robert”的字符串,那么您可以始终“拆分”并标记输入:

var input=“Peter Robert”;
var parts=input.split(//);//空间分裂
db.collection.find({
“名字”:零件[0],
“姓氏”部分[1]
])
这是非常基本的。甚至可以在混合中应用
$regex
$Or
运算符:

var input=“Peter Robert”;
var regexStr=input.split(//)。join(“|”);//使其类似于“Peter | Robert”
db.collection.find({
“$or”:[
{“firstName”:{“$regex”:regexStr},
{“lastName”:{“$regex”:regexStr}
]
})
老实说,您甚至可以使用
$where
操作符和JavaScript来实现这一点。但这并不是最好的,因为条件会对每个文档进行评估:

db.collection.find(函数(){
return(this.firstName+“”+this.lastName)==“Peter Robert”;
})
不过,使用聚合框架可能会更好一些:

db.collection.aggregate([
//从上面借些东西来获得“可能”匹配的文档
{“$match”:{
“$or”:[
{“firstName”:{“$regex”:regexStr},
{“lastName”:{“$regex”:regexStr}
]
}},
//然后投射一个“全名”
{“$project”:{
“名字”:1,
“姓氏”:1,
“全名”:{“$concat”:[“$firstName”,”,“$lastName”]}
}},
//匹配全名值
{“$match”:{“全名”:输入}
])

有很多方法可以做到这一点。您不受框架的限制(例如那些在客户端“模拟”Mongo函数的框架),因为有多种方法可以处理此操作和服务器端操作,如“文本搜索”和聚合以及“JavaScript查询”所有这些都可以在服务器逻辑代码中完成。

您的问题刚刚被编辑,meteor标记被删除。您使用的是哪一个?meteor还是mongoose?您不会同时使用这两个。我使用meteor,一些meteor开发人员过去可能有过这个问题。不得不问,主要是因为我看到前一位编辑人员删除了标记。也因为“一些”其中的一些解决方案不会立即转化为“minimongo”,因为它们是基于“服务器”的。不过,您始终可以在服务器端运行代码并发布方法。有许多不同的方法可以实现这一点。