【问题标题】:How to match two different Object ids using MongoDB find() query?如何使用 MongoDB find() 查询匹配两个不同的对象 ID?
【发布时间】:2021-09-21 17:59:23
【问题描述】:

我有一个类似下面的条目,

[
  {
    "_id":ObjectId("59ce020caa87df4da0ee2c78"),
    "name": "Tom",
    "owner_id": ObjectId("59ce020caa87df4da0ee2c78")
  },
  {
    "_id":ObjectId("59ce020caa87df4da0ee2c79"),
    "name": "John",
    "owner_id": ObjectId("59ce020caa87df4da0ee2c78")
  }
]

现在,我需要在 MongoDB 中使用 find() 找到 _id 等于 owner_id 的人。 请注意,由于某种原因,我们不能不使用 $match(聚合)。

我正在使用这个查询,

db.people.find({ $where:  "this._id == this.owner_id" })

但是,它没有返回预期的输出。谁能帮我解决这个问题。

谢谢。

【问题讨论】:

  • 尝试使用 $expr 和聚合 $eq 运算符(而不是 $where)

标签: mongodb mongoose mongodb-query


【解决方案1】:

使用$expr 和$eq 可以获得所需的值,避免在查找阶段使用$where(不需要聚合)。

db.collection.find({
  "$expr": {
    "$eq": [
      "$_id",
      "$owner_id"
    ]
  }
})

【讨论】:

  • 为了增加上下文,我们尽量不要使用 { where: '' } 因为它作为 JS 执行并且会慢得多。
  • 嗨,@J.F.,有没有不使用 $expr 的方法?
猜你喜欢
  • 2020-05-31
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 2020-03-24
相关资源
最近更新 更多