MongoDB的一次奇妙查詢

這段時間遇到了一個業務需求,我有一些關於書籍的文檔數據存儲在MongoDB數據中,然後在修復數據之後,需要用一個查詢去驗證更新是否成功。
書籍數據大概長這個樣子:

{
  "books": [
    {
      "name": "UbuntuMeta",
      "sku_id": "101",
      "price": 30.5
    },
    {
      "name": "freePHP",
      "sku_id": "102",
      "price": 75.5
    }
  ],
  "best_books": [
    {
      "name": "UbuntuMeta",
      "sku_id": "101",
      "price": 30.5
    }
  ]
}
···

我想根據sku_id查詢到在best_kooks裏面元素但不再books裏面的元素,根據思考我寫出如下的查詢語句:
···
 $expr: {
            $not: {
              $setIsSubset: ['$best_books.sku_id', '$books.sku_id']
            }
 }

但是會出現如下報錯:

Reason: error while multiplanner was selecting best plan :: caused by :: both operands of $setIsSubset must be arrays. First argument is of type: missing

這是因爲best_books可能不存在或者不是array類型,所以需要增加一個條件:

 { $expr: { $eq: [{ $type: "$best_books" }, "array"] } },
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章