Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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 查询比较对象数组_Javascript_Node.js_Mongodb_Mongoose_Mongodb Query - Fatal编程技术网

Javascript 查询比较对象数组

Javascript 查询比较对象数组,javascript,node.js,mongodb,mongoose,mongodb-query,Javascript,Node.js,Mongodb,Mongoose,Mongodb Query,我想知道如何比较Mongoose中的(嵌套)对象数组 考虑到下面的数据,我希望在name属性匹配时得到结果。有人能帮我吗 Organisation.find( { $or: [ { "category_list": { $in: cat_list } }, { "place_topics.data": { $in: place_tops } } ] } ) 假设这是存储在我的Mong

我想知道如何比较Mongoose中的(嵌套)对象数组

考虑到下面的数据,我希望在
name
属性匹配时得到结果。有人能帮我吗

    Organisation.find( { 
        $or: [ 
          { "category_list": { $in: cat_list } }, 
          { "place_topics.data": { $in: place_tops } } 
        ] 
      } 
    )
假设这是存储在我的MongoDB中的数据:

  "category_list": [
      {
          "id": "197750126917541",
          "name": "Pool & Billiard Hall"
      },
      {
          "id": "197871390225897",
          "name": "Cafe"
      },
      {
          "id": "218693881483234",
          "name": "Pub"
      }
  ],
  "place_topics": {
      "data": [
          {
              "name": "Pool & Billiard Hall",
              "id": "197750126917541"
          },
          {
              "name": "Pub",
              "id": "218693881483234"
          }
      ]
  }
假设这些是我想要比较的数组(几乎相同的数据):

当每个数组元素都有required时,就是您实际使用的时候,实际上是“需要”,否则您就不匹配正确的元素

因此,若要应用多个条件,您宁愿为创建条件数组,而不是使用以下快捷方式:

然而,如果你退一步,从逻辑上考虑,你实际上将其中一个属性命名为“id”。这通常意味着在所有良好实践中,价值实际上是“独特的”

因此,您真正需要做的只是提取这些值并坚持使用原始查询表单:

Organizations.find({
  "$or": [
    { "category_list.id": { "$in": cat_list.map(c => c.id) } },
    { "place_topics.id": { "$in": place_tops.map(p => p.id) } }
  ]
})
因此,只需将要“匹配”的值和属性映射到
“id”
值即可。这是一种简单的形式,通常在每个数组元素有一个条件进行测试/匹配时就足够了


这通常是给定数据的最合乎逻辑的方法,您应该应用其中哪一种方法真正适合您需要的数据条件“使用。但是如果因为存在单数匹配而不需要多个,那么只需进行单数匹配

以下是真的吗?只有当:-要比较的数组与其对应的数组具有相同的长度时,我们才有匹配;-它们包含同一组ID;-具有相同id的记录应该具有相同的名称,其他字段可以不同。事实上,MongoDB中存储的数据也包含一个字符串_id,因此它是假的。是的,但您写的是您对比较名称感兴趣,所以我假设您想检查,尽管与id匹配,名称是否相同(最新或smth)。看起来我误解了你。没问题,我提供的数据不是实际存储的数据,实际存储的数据更像:
{“\u id”:{“$oid”:“5931bd880472150069e7c”},“name”:“Pool&Bill Hall”}
我本应该存储数字ID,但我没有,所以我必须按名称进行比较:/这似乎很管用,我使用最后一种方法,因为在两种语句中都有一个匹配就足够了。非常感谢你!
Organizations.find({
  "$or": [].concat(
    cat_list.map( c => ({ "category_list": { "$elemMatch": c } }) ),
    place_tops.map( p => ({ "place_topics": { "$elemMatch": p } }) )
  )
})
Organizations.find({
  "$or": [
    { "category_list.id": { "$in": cat_list.map(c => c.id) } },
    { "place_topics.id": { "$in": place_tops.map(p => p.id) } }
  ]
})