微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对象在新数组内传播

如何解决对象在新数组内传播

我有一个 Node.js 程序,它使用 Mongo Atlas 搜索索引并利用 MongoDB 驱动程序内部的聚合函数。为了进行搜索用户将在 URL 的查询参数中传递搜索查询。话虽如此,我正在尝试根据查询参数是否存在来构建搜索对象。为了构建搜索对象,我目前使用对象扩展语法和参数短路,如下所示:

const mustObj = {
  ...(query.term && {
    text: {
      query: query.term,path: ['name','description','specs'],fuzzy: {
        maxEdits: 2.0,},})
}

这是一个缩短的版本,因为有更多的参数,但你会开玩笑。

在 MongoDB 搜索查询中,如果您有多个必须满足特定条件的参数,则必须将它们包含在名为 must 的数组中,如下所示:

{
  $search: {
    compound: {
       must: [],}

因此,为了包含我的搜索参数,我必须首先使用 mustObj 将我的 Object.keys 转换为一个对象数组并将它们映射到一个数组,然后将搜索“必须”数组分配给我创建的数组,如下所示:

const mustArr = Object.keys(mustObj).map((key) => {
  return { [key === 'text2' ? 'text' : key]: mustObj[key] };
});
searchObj[0].$search.compound.must = mustArr;

我想做的是,不是创建 mustObj 然后遍历整个事物以创建数组,而是使用我在创建对象。

我尝试了以下代码,但无济于事。我收到“对象不可迭代”错误

const mustArr = [
  ...(query.term && {
    text: {
      query: query.term,})
]

总而言之,我的问题是,我问的甚至可能吗?如果是这样,如何?

解决方法

根据@VLAZ 评论更正:

虽然 spread 带有数组 [...(item)],但 item 必须是数组(可迭代)。

当您使用短路时,item 如下所示,

 true && [] ==> will be `[]` ==> it will work 
 false && [] ==> will be `false` ==> wont work (because false is not array)

尝试一些类似的事情(类似于@Chau 的建议)

const mustArr = [
  ...(query.term ? [{
    text: {
      query: query.term,path: ['name','description','specs'],fuzzy: {
        maxEdits: 2.0,},}] : [])
]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?