Невозможно вставить документ в монго с помощью gmongo

У меня есть следующий код для вставки документа в Groovy, но я продолжаю получать эту ошибку в приложениях Grails

   def zipcode = getDocumentCollection()
   zipcode.insert(["city": "ACMAR", "loc": [-86.51557F, 33.584132F], "pop": 6055, "state": "AL", "_id": "35004"])

Нет сигнатуры метода: com.mongodb.DBApiLayer$MyCollection.insert() применим к типам аргументов: (java.util.LinkedHashMap) значения: [[city:ACMAR, loc:[-86.51557, 33.584133], ...]] Возможные решения: вставить ([Lcom.mongodb.DBObject;), вставить (java.util.List), вставить ([Lcom.mongodb.DBObject;, com.mongodb.WriteConcern), вставить (com.mongodb.DBObject, com.mongodb.WriteConcern), вставить (com.mongodb.WriteConcern, [Lcom.mongodb.DBObject;), вставить (java.util.List, com.mongodb.WriteConcern)

этот код взят из примера gmongo. Есть идеи, почему я получаю ошибку?

ОБНОВИТЬ
Я получаю приведенную ниже ошибку в приложении Grails после попытки подхода @dmahapatro:

2013-06-06 09:54:21,493 [localhost-startStop-1] ERROR context.GrailsContextLoader  - Error initializing the application: Error creating bean with name 'org.springframework.data.mongodb.monitor.OperationCounters#0': Unsatisfied dependency expressed through constructor argument with index 0 of type [com.mongodb.Mongo]: Could not convert constructor argument value of type [com.gmongo.GMongo] to required type [com.mongodb.Mongo]: Failed to convert value of type 'com.gmongo.GMongo' to required type 'com.mongodb.Mongo'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [com.gmongo.GMongo] to required type [com.mongodb.Mongo]: no matching editors or conversion strategy found
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.data.mongodb.monitor.OperationCounters#0': Unsatisfied dependency expressed
 through constructor argument with index 0 of type [com.mongodb.Mongo]: Could not convert constructor argument value of type [com.gmongo.GMongo] to required type [com.mongodb.Mongo]: Failed to
 convert value of type 'com.gmongo.GMongo' to required type 'com.mongodb.Mongo'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [com.gmongo.GMongo] to required type [com.mongodb.Mongo]: no matching editors or conversion strategy found
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:722)

1 ответ

Когда вы используете insert вам нужно предоставить пары ключ-значение в виде именованных аргументов (я думаю, вы также можете использовать карту, но она будет менее многословной).

zipcode.insert(city: "ACMAR", loc: [-86.51557F, 33.584132F], pop: 6055, state: "AL", _id: "35004")

Если вы хотите использовать HashMap затем используйте оператор сдвига влево, чтобы вставить документы в коллекцию.

zipcode << ["city": "ACMAR", "loc": [-86.51557F, 33.584132F], "pop": 6055, "state": "AL", "_id": "35004"]

Я бы пошел со вторым подходом, если бы я использовал агрегацию.

Образец

Это прекрасно работает для меня при тестировании.

@Grab(group='com.gmongo', module='gmongo', version='1.0')
import com.gmongo.GMongo

def mongo = new GMongo("127.0.0.1", 27017)
def db = mongo.getDB("gmongo")
//Instead of doing below I can also use db.zipcodes.insert(blah: blah)
def zipCode = db.getCollection("zipcodes")
zipCode.insert(city: "ACMAR", loc: [-86.51557F, 33.584132F], pop: 6055, state: "AL", _id: "35004")
zipCode << [city: "DUMMY", loc: [-86.51587F, 33.584172F], pop: 6056, state: "AL", _id: "35005"]

assert db.zipcodes.findOne(city: "DUMMY").city == 'DUMMY'
assert db.zipcodes.findOne(city: "ACMAR").city == 'ACMAR'
Другие вопросы по тегам