当前位置: 首页 > 知识库问答 >
问题:

在mongodb中选择匹配两个字段的concat值的记录

罗法
2023-03-14
select * from table where concat(field1, field2) = 'value'

为了澄清,我有一个全名数组,但是文档的firstname和lastname是分开的,所以我想做一些类似的事情:

select * from table where concat(firstname, lastname) in ([ARRAY OF NAMES])

共有1个答案

唐向荣
2023-03-14

您只能使用聚合框架,而不能使用常规查找。

db.coll.aggregate({$project:{newField:{$concat:["$field1","$field2"]}}},
                  {$match:{newField:"value"}} 
);

请注意,这将不能使用任何索引,因为MongoDB中还不支持计算值的索引。

如果在field1上有一个索引,并且知道希望field1贡献给的字符数,则可以像下面这样提高聚合的性能:

db.coll.aggregate({$match:{field1:/^val/}},
                  {$project:{newField:{$concat:["$field1","$field2"]}}},
                  {$match:{newField:"value"}} 
);
db.coll.find({$expr:{$eq:["value", {$concat:["$field1", "$field2"]}]}})
 类似资料:
  • 问题内容: 在我有一个像这样的表的情况下: 我只想为每个工作人员(用staff_id表示)选择一个记录,列出他们的主要技能,用mainskill中的(1)表示。如果没有主要技能,我想退还该工作人员的任何技能记录。例如: 查询应返回: 我尝试了分组,DISTINCT等的各种组合,但无法获得我想要的输出。任何帮助表示赞赏。 问题答案: SQL Server 2005+,使用CTE: SQL Serve

  • 问题内容: 我有这样一个表(myTable): 我想要一个查询,该查询返回每个记录,但是增加了一个列,该列包含orig_id与当前行的id相等的其他行的计数。 结果表如下所示: 我尝试了以下查询,但没有结果: 我怎样才能达到预期的效果? 问题答案: 您可以通过联接和聚合来做到这一点:

  • 我正在尝试从一个select表单中获取一个时间值。我在代码中看不到任何错误,尝试更改所有类名和变量,但值仍然没有被get select。(提交表单后我看不到所选的值) 代码添加如下:

  • frmAdd f=新frmAdd();string connectionString=(“server=(localdb)\v11.0;attachdbfilename=”+application.startuppath+“\database\”+f.databasename+“.mdf;connect timeout=30;”);SqlConnection connection=新建SqlCon

  • 问题内容: 如何仅返回MySQL中字段的第一个不同匹配项? 我的表: 我的查询(用于): 这将返回: 而不是:( 我追求的结果) 如何只获得每个唯一名称的第一个匹配项? 我想返回第一个,跳过第二个(以及任何后续的匹配项),但仍然得到(以及任何其他不同的匹配项,例如或)。 问题答案: 不能以这种方式工作,返回的所有列中的值都必须是不同的。 您可以始终在该函数上使用聚合函数,该函数将为每个函数返回一个

  • 问题内容: 在我的收藏夹中,每个文档都有2个修改和同步的日期。我想查找已修改>同步,或不存在同步的内容。 我试过了 但没有显示我的期望。有任何想法吗? 谢谢 问题答案: 您不能将一个字段与具有正常查询匹配的另一个字段的值进行比较。但是,您可以使用聚合框架执行此操作: 我在其中输入“您的其他常规查询”,因为您可以使该位使用索引。因此,如果您只想对该字段所在的文档执行此操作,则可以执行以下操作: 用输