繁体   English   中英

Object 分布在新阵列内部

[英]Object spread inside of new array

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

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

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

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

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

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

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

我想要做的是,而不是创建mustObj然后循环整个事物以创建一个数组,而是使用我在创建 object 时使用的扩展语法和短程序方法来创建数组。

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

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

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

根据@VLAZ 评论更正:

虽然使用数组[...(item)] spread ,但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,
      },
    },
  }] : [])
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM