我Book的 mongoDb 中有如下所示的物件(非常簡化):
{
"_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" } );
但在任何情況下,我都不會從給定作者那里得到現有的書籍,而且我只會得到空陣列。
我究竟做錯了什么?
uj5u.com熱心網友回復:
第一個查詢的問題:
當您想在嵌套欄位中查詢時,您必須像在第二個查詢中那樣使用點表示法。
不使用點表示法的問題是 mongo 匹配整個物件(甚至欄位順序)所以不是一個好方法......你可以檢查簡單的例子,如:
- 這一個: 找到物件是因為物件完全一樣。
- 另一個這個物件在集合中的兩個物件中具有相同的欄位和值,但是......使用物件查詢順序很重要,所以只回傳一個。
第二個查詢的問題:
我認為這里的問題是你匹配stringvs ObjectId。語法是正確的(點表示法),但是當 mondo 匹配值時,其中一個是字串,另一個是 ObjectId。
所以你可以試試這個查詢:
const booksByAuthor = await Book.find({ 'author._id': mongoose.Types.ObjectId("620e341dbf575892d9396dd4") } );
使用您的查詢檢查此示例,匹配字串和 ObjectId 未回傳任何結果,但將字串決議為 ObjectId...出現魔術
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/429512.html
