如何表达$或何时使用cl-mongo

时间:2014-09-01 09:50:39

标签: mongodb lisp common-lisp

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

1 个答案:

答案 0 :(得分:2)

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

在mongo中,我认为它会是:

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

在cl-mongo中,您将&#34; object&#34; s转换为kv表单,将&#34; array&#34; s转换为列表。许多mongo运算符定义了shorthands,但我认为$or不是其中之一,因此您需要定义或明确地执行:

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

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

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

然后你可以写

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

(未测试的)。