1

我以前没用过MongoDb,也没用过Monger。我正在开发一个 Clojure 应用程序。我只是希望能够添加一个文档,作为 upsert。这是我的一些代码:

(defn convert-data-to-be-persisted [session-data]
  (convert/to-db-object session-data))

(defn persist-data-to-database [converted-document-to-persist]
  (mc/update "timeout_discovery" {:sessions converted-document-to-persist} {} :upsert true))

我正在使用贩子:

http://clojuremongodb.info/

我拥有的 println 和 timbre/spy 语句正在将此数据打印到终端输出:

在持久数据到数据库中:{“serverUsed”:“/127.0.0.1:27017”,“updatedExisting”:false,“upserted”:{“$oid”:“510680444077296acfa67d6b”},“n”:1, “connectionId”:4,“err”:null,“ok”:1.0}

如果我在命令行登录 MongoDb,似乎集合仍然是空的:

db.timeout_discovery.find() { "_id" : ObjectId("51017c5fa86c7bcc3d423c4d"), "timeout" : "discovery" }

有一个文档,但里面除了“超时”和“发现”之外什么都没有。

我看这里试图弄清楚该怎么做,但我尝试的每一个变化都失败了:

http://clojuremongodb.info/articles/updating.html

这一行:

(convert/to-db-object session-data))

返回此文档(但我在此处将其缩短,因为原始文档很长,其中包含您在此处看到的更多 HTML):

在 get-data-to-be-persisted 中要持久化的文档是: { "e6e20a2c-cb46-498c-b2f2-743e2b38b917" : { "itinerary-as-string" : "\n \t\n \t\t

http://www.super.com/mexico/bars/2012-food-drink-award-nominees-best\" class=\"fn given-name url\">2012 年餐饮奖提名:最佳新啤酒吧

\n \t\t \t\t \n \n 投票现已结束\n在此处查看结果在餐厅 + 酒吧中查看更多信息

\n \t\n \t\n http://www.super.com/mexico/bars/2012-food-drink-award-nominees-best-new-beer-bar\">http://media. super.com/images/100131935/150/113/image.jpg\" /> \n \n \n \t\n \t\t

http://www.super.com/mexico/sex-dating/summer-dates-in-mexico-bars-and-restaurants\" class=\"fn given-name url\">夏季日期:食物和-在墨西哥酒吧和餐厅喝酒约会

\n \t\t \t\t

性与约会

\n \n \n 在这些夏季约会期间,在墨西哥热门景点享用晚餐或饮品。如果您要追求一个痴迷于食物的伴侣,请不要在本季的标准晚餐和电影之外。在纽约查看五个以食物和饮料为重点的夏季约会......

\n \t\n \t\n http://www.super.com/mexico/sex-dating/summer-dates\">http://media.super.com/images/100453911/150/113/图像.jpg\" /> \n \n \n \t\n \t\t

http://www.super.com/mexico/restaurants/organic\" class=\"fn given-name url\">有机

\n \t\t \t\t

美食美酒、美式风味、亚洲风味

\n \n \n \n $\n \n \n \n \n \n https://foursquare.com/intent/venue.html\" data-context=\"vcard-Content-Venue-50137\">保存到foursquare\n \n \n \n Tribeca fro-yo 狂热者可以在这家有机健康食品吧的第二个位置满足他们对健康的渴望。明亮的外卖店——配备木镶板和白色和绿色的柜台——还供应鲜榨果汁果汁和冰沙,...

编辑 \n \t \n \t\n \t\n http://www.super.com/mexico/restaurants/organic\">http://media.super.com/images/100461855/150/113 /image.jpg\" /> \n \n \n \n \t \n 275 Greenwich St, (Murray Sts 和 Warren Sts 之间), New York, 10007\n \t \n \t \t \n \t \t平均课程:9 美元。美国运通,光盘,MC,... \t \n \n http://www.super.com/mexico/restaurants/organic\">

那么,为什么不保存呢?

我没有在终端输出中看到任何错误,但如果有错误,我想要关于如何捕获并查看它的建议。

如果没有错误,我是否只是因为 MongoDb 或 monger 的语法错误?

4

1 回答 1

0

Monger的作者在这里。你在什么环境下运行这段代码?这可能是身份验证问题。Monger 默认使用“安全”写入关注点,因此写入永远不会静默失败(就 Monger 而言,您仍然必须处理异常)。根据您发布的服务器响应,写入成功(您可以在响应文档中看到“ok”:1.0)。

如果您对函数参数有任何疑问,请参阅 Monger 的文档。我强烈建议从 REPL 中的入门指南开始。

于 2013-01-29T21:12:32.973 回答