【问题标题】:How can I realize "find" with using "$in" by two parameters in mangoose?如何通过猫鼬中的两个参数使用“$in”来实现“查找”?
【发布时间】:2021-02-24 07:58:47
【问题描述】:

您好,我有一个函数可以像这样获取具有 id 数组的对象。

{
  "participants": [
    "5fa566b5b96a9407c804ccd4",
    "5fa5639cb96a9407c804ccce"
  ]
}

而且我需要找到恰好具有此字段的对象 我试图在其中找到它的对象如下所示:

{
  "_id" : ObjectId("5fac288e53a6a72e94f721fa"),
  "participants" : [ 
      ObjectId("5fa566b5b96a9407c804ccd5"), 
      ObjectId("5fa5639cb96a9407c804ccc5")
  ],
  "messages" : [],
}

我正在尝试这样做,但它不起作用。

async filterDialog(newDialog: any){
  const res = await Dialog.find({
    'participants': { $in: { ...newDialog.participants } }, function(err: any, dialog: any) {
      if (err) {
        return err
      } else {
        return dialog
      }
    },
  })
  return res;
}

如果有人帮助我会很高兴。

【问题讨论】:

  • 你能发布输入和预期输出吗?我不明白你到底想要什么。给定一个 participants 数组(第一个代码块)返回一个包含这些值的对象?但是示例文档没有任何participants_id。
  • 在 filterDialog(newDialog: any) newDialog 是两个 Id 用户的数组,通过这两个 id,我必须找到这两个 id 存在的对话框,但如果在此 id 之间的对话框集合中没有'不存在我必须返回一个空对象
  • 好的,并且必须匹配整个数组?还是只有一个值?

标签: reactjs mongodb typescript mongoose


【解决方案1】:

我认为您需要$all 运算符。

检查这个查询:

db.collection.find({
  "participants": {
    "$all": yourArray
  }
})

仅返回字段participants 包含给定数组中所有元素的文档。

例如here,我使用数字而不是ObjectId 以便于阅读。

请检查这是否是您所期望的行为。

【讨论】:

    猜你喜欢
    • 2016-03-31
    • 2019-07-12
    • 2023-01-30
    • 2016-10-02
    • 2014-03-10
    • 2021-10-17
    • 2020-03-06
    • 1970-01-01
    • 2015-12-03
    相关资源
    最近更新 更多