账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    MongoDB 如何通过一个对象数组进行查询?
    44
    0

    问题描述

    如何采用一个Mongo query、使用以下query查询得到正确结果?

    // full documents 
    [
      { id: 1, category: 'computer', value: 1 }, 
      { id: 2, category: 'computer', value: 2 }, 
      { id: 3, category: 'book', value: 2 }, 
    ]
    
    // query
    const query = [
      { category: 'computer', value: 1 },
      { category: 'book', value: 2 }
    ]

    期待输出:

    [
      { id: 1, category: 'computer', value: 1 }, 
      { id: 3, category: 'book', value: 2 }, 
    ]

    问题出现的平台版本及自己尝试过哪些方法

    技术栈:JavaScript、Node 12、mongoose 4.11

    项目组现在采用的方式是如下方法,即使用一个循环把query先map出来,再对每个对象作一一查询操作,但产品环境上可能同时查询许多记录,循环速度稍慢。

    await Promise.all(
      query.map(({ category, value }) => {
        return db.collection.update(
          { category, value },
          { $set: { visitor: ['some-label'] }}
        )
      })
    )

    我们还尝试过使用$in操作符,但这样可能多筛选出一些结果,并不是我们期望的效果。

    db.collection.update(
      { 
        category: { $in: query.map(one => one.category) }, 
        value: { $in: query.map(one => one.value) },
      },
      { $set: { visitor: ['some-label'] } }
    )

    感谢大佬们热心解答!

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部