這段時間遇到了一個業務需求,我有一些關於書籍的文檔數據存儲在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"] } },