代码之家  ›  专栏  ›  技术社区  ›  Lukas

匹配MongoDB中包含数组的一组项

  •  1
  • Lukas  · 技术社区  · 7 年前

    假设我有以下数据

    [
      { name: 'A', values: [1, 2, 3 ,4] },
      { name: 'B', values: [5, 6, 7, 8] }
    ]
    

    我有一个 mongodb 集合中包含以下项的:

    #1 { name: 'A', values: [1, 2, 3 ,4], path: '...' },
    #2 { name: 'B', values: [8, 9, 5, 7], path: '...' },
    #3 { name: 'B', values: [5, 6, 7, 8], path: '...' },
    #4 { name: 'C', values: [9, 10, 11, 12], path: '...' }
    

    现在我想查询 path 与我的两个项目相匹配的 A 和 B data #1 和 #3 ). 可能吗 edit: with a single query ?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ashh    7 年前

    你可以循环通过 data map 通过使其异步来实现

    const data = [
      { name: 'A', values: [1, 2, 3 ,4] },
      { name: 'B', values: [5, 6, 7, 8] }
    ]
    
    const result = []
    await Promise.all(data.map(async(d) => {
      result.push(await db.collection.findOne(d))
    }))
    

    甚至使用单个查询

    await db.collection.find(
      {
        name: { $in: data.map(({ name }) => name) },
        values: { $in: data.map(({ values }) => values) }
      }
    )