mongodb - 使用 cl-mongo 时如何表达 $or

标签 mongodb lisp common-lisp

我在 https://github.com/fons/cl-mongo 阅读了整个文档并了解(db.find "foo" (kv ($> "i" 3) ($< "j" 5)))表示当“i>3 AND j<5”时查询。
我的问题是“$or”的代码是什么?喜欢查询当 i>3 j<5?
谢谢。

最佳答案

您需要使用 cl-mongo 的原语翻译您需要以 mongo 格式表达的任何内容。

在 mongo 中,我认为它会是:

{$or: [{i: {$gt: 3}},
       {j: {$lt: 5}}]}

在 cl-mongo 中,您将“对象”转换为 kv 形式,将“数组”转换为列表。许多 mongo 运算符都定义了简写形式,但我认为 $or 不是其中之一,因此您需要定义它或显式定义它:

(kv "$or"
    (list ($> i 3)
          ($< j 5)))

$or 的便捷宏可能如下所示:

(defmacro $or (&rest forms)
  `(kv "$or" (list ,@forms)))

然后就可以写了

($or ($> i 3)
     ($< j 5))

(未经测试)。

关于mongodb - 使用 cl-mongo 时如何表达 $or,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25603116/

相关文章:

web-applications - 用于 Lift Web 应用程序的 CouchDB 或 MongoDB?

format - 通用 Lisp : Cardinal English Number to Integer

oop - Clojure 的 CLOS?

javascript - 如何使用更改事件返回 meteor 中选定选项值的 ID?

node.js - net::ERR_CONNECTION_CLOSED 在 mongo 文档中有超过 7 个子文档时在远程服务器上

lisp - Common Lisp 函数可以按位置或关键字接受参数吗?

emacs - 如何配置 .emacs 以启用 "C-v"将光标移动半个窗口高度

lambda - let-over-lambda 书中的 cl-ppcre 阅读器

lisp - 如何获取所有内置函数的列表?

c# - MongoDB 查询/建模思想