查询 mongodb 嵌套对象

Querying mongodb for a nested object

我的 mongoDb 中有 Book 个对象,看起来像这样(非常简单):

{
  "_id": ObjectId("620e341dbf575892d9396dc2"),
  "title": "my title",
  "author": {
    "_id": ObjectId("620e341dbf575892d9396dd4"),
    "surname": "My surname"
  }
}

我正在尝试查询并获取某个作者的所有书籍,到目前为止我已经尝试过:

const booksByAuthor = await Book.find({ author: { _id: "620e341dbf575892d9396dd4" } });

const booksByAuthor = await Book.find({ 'author._id': "620e341dbf575892d9396dd4" } );

但在任何情况下我都不会从给定的作者那里得到现有的书籍,而且我只会得到空数组。

我做错了什么?

第一次查询的问题:

当您想在嵌套字段中查询时,您必须像在第二个查询中那样使用 dot notation
不使用点符号的问题是 mongo 匹配整个对象(甚至字段顺序)所以不是一个好方法......你可以检查简单的例子,如:

  • This one:找到对象,因为对象一模一样
  • Another this one 其中对象具有来自集合中两个对象的相同字段和值,但是...使用顺序重要的对象进行查询,因此只有 returns 一个。

第二次查询的问题:

我认为这里的问题是你在匹配 stringObjectId。语法是正确的(点符号)但是当 mondo 匹配值时,其中一个是字符串,另一个是 ObjectId。

所以你可以试试这个查询:

const booksByAuthor = await Book.find({ 'author._id': mongoose.Types.ObjectId("620e341dbf575892d9396dd4") } );

勾选this example with your query, matching string and ObjectId none result is returned, but parsing string to ObjectId... magic appears