MongoDB的一次奇妙查询

x33g5p2x  于9个月前 转载在 Go  
字(0.9k)|赞(0)|评价(0)|浏览(442)

这段时间遇到了一个业务需求,我有一些关于书籍的文档数据存储在MongoDB数据中,然后在修复数据之后,需要用一个查询去验证更新是否成功。
书籍数据大概长这个样子:

  1. {
  2. "books": [
  3. {
  4. "name": "UbuntuMeta",
  5. "sku_id": "101",
  6. "price": 30.5
  7. },
  8. {
  9. "name": "freePHP",
  10. "sku_id": "102",
  11. "price": 75.5
  12. }
  13. ],
  14. "best_books": [
  15. {
  16. "name": "UbuntuMeta",
  17. "sku_id": "101",
  18. "price": 30.5
  19. }
  20. ]
  21. }
  22. ···
  23. 我想根据sku_id查询到在best_kooks里面元素但不再books里面的元素,根据思考我写出如下的查询语句:
  24. ···
  25. $expr: {
  26. $not: {
  27. $setIsSubset: ['$best_books.sku_id', '$books.sku_id']
  28. }
  29. }

但是会出现如下报错:

  1. 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类型,所以需要增加一个条件:

  1. { $expr: { $eq: [{ $type: "$best_books" }, "array"] } },

mongodb 5.x之后才会有这个问题,我本地环境是4.x的mongodb则不需要家这个条件,也不会报错。

总结

一定要让自己的开发环境和线上环境保持一致,这样才能保证功能代码一定正确实现和有效地执行。

相关文章

最新文章

更多