如何在ColdFusion中使用MongoDB

10

我正在使用MongoDB 3.2.3和mongo-java-driver-3.2.2.jar库。

为了连接到服务器并连接到特定的数据库,我按照以下步骤进行操作。然后我创建了一个名为col1的集合:

<cfset Mongo  = CreateObject("java","com.mongodb.MongoClient")>
<cfset Mongo.init("192.168.0.30")>
<cfset db = Mongo.getDatabase('testaj')>
<cfset db.createCollection("col1") >

我从互联网上获取了以下代码,用于将文档插入集合中:

<cffunction name="m" returntype="any">
    <cfargument name="value" type="any">
    <cfif IsJSON(arguments.value)>
        <cfset local.retrun = CreateObject("java","com.mongodb.util.JSON").parse(arguments.value)>
    <cfelse>
        <cfset local.retrun = CreateObject("java","com.mongodb.util.JSON").parse( SerializeJSON(arguments.value) )>     
    </cfif>
    <cfreturn local.retrun>
</cffunction>

<cfset doc = {
    "Name"  = "Marc",
    "Spouse"= "Heather",
    "Fruit" = "Mango",
    "Kids"  = [
                {"Name"="Alexis", "Age"=7, "Hair"="blonde", "Description"="crazy" },
                {"Name"="Sidney", "Age"=2, "Hair"="dirty blonde", "Description"="ornery" }
            ],
    "Bike" = "Felt",
    "LoveSQL" = true,
    "TS" = now(),
    "Counter" = 1
    }>
<cfset doc = SerializeJSON(doc)>
<cfset doc = m(doc)>

<cfset col1.save(doc)>

不幸的是,最后一行会生成以下错误:

No matching Method/Function for com.mongodb.MongoCollectionImpl.save(com.mongodb.BasicDBObject) found

当我输出(通过cfdump)类com.mongodb.MongoCollectionImpl的内容时,似乎完全合乎逻辑,因为我没有看到save方法。

有人知道如何使用这个Java驱动程序在ColdFusion中插入MongoDB文档吗?
我应该导入另一个库或类吗?


db.col1.save(doc) 有效吗?还是 db.testaj.save(doc) - Miguel-F
我看不到你在代码中创建 col1 变量的位置。难道不应该是:col1 = db.getCollection("col1"); col1.insert(doc) - John Whish
嗨约翰..这是:<cfset db.createCollection("col1") > - user3569267
嗨,Miguel。不是第二个语法有效。它会生成以下错误:(在[com.mongodb.MongoDatabaseImpl]中找不到匹配的属性[TESTAJ](或col1))。 - user3569267
约翰,你知道 col1 = db.getCollection("col1"); col1.insert(doc) 这个语法在哪个版本的驱动程序中可以使用吗? - user3569267
不确定您的原始代码示例是哪个版本,但对文档进行了非常简要的浏览,建议的方法可能会有所不同。您是否查看过官方3.2文档 - Leigh
2个回答

2

我正在使用MongoDB 4.0,Mongo-Java-Driver 3.8.0和CF11。经过试错,我使下面的代码工作了。关键是转换为org.bson.document。希望这能为其他人节省一些时间。

<cfset Mongo  = CreateObject("java","com.mongodb.MongoClient").init("localhost")>
<cfset db = Mongo.getDatabase('testDB')>
<cfset testCol = db.getCollection("testCol")>

<cfscript>
x=structnew();
x.name="John Doe";
x.address="1010 Yellow Brick Road";
x.phone="867-5309"
</cfscript>

<cfset data=CreateObject("java","org.bson.Document").init(x)>
<cfset testCol.insertOne(data)>

谢谢Steve - 插入时间戳也可以,并且在数据集中将由正确的日期类型表示!x.mytime = Now();(是的,我知道ObjectID也代表时间戳 :)) - SteffenM

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接