import std/[
oids,
asyncdispatch,
]
import nimongo/bson
import nimongo/mongo
proc test_sync2=
var m = newMongo()
doAssert m.connect()
let mc = m["tmp"]["tnimongo"]
let doc = %*{
"name": "bob4",
}
for i in 0..<2:
# doc["number"] = toBson i
# echo doc
let ai = mc.insert(doc)
echo ai
doAssert ai
test_sync2()
import pymongo
from pymongo import MongoClient
client = MongoClient()
cm = client.tmp.tnimongo
obj = {"name": "bob6"}
for i in range(2):
print(obj)
ret = cm.insert_one(obj)
print(obj)
print(ret.inserted_id)
maybe behavior of Nim is ok, and derives from fact that Bson is a reference type (unlike Bson in Nim); this could have advantages in terms of efficiency (avoiding copies), but IMO should be clearly documented in README that insert modifies input Bson (unlike other implementations, eg D, mongo shell)
this generates a single insert:
the equivalent code in D generates 2 inserts:
likewise with other clients, eg the mongo shell client
edit
in python, it behaves same as Nim (well almost, minus the fact that python will throw, see https://github.com/SSPkrolik/nimongo/issues/66)
maybe behavior of Nim is ok, and derives from fact that Bson is a reference type (unlike Bson in Nim); this could have advantages in terms of efficiency (avoiding copies), but IMO should be clearly documented in README that
insert
modifies input Bson (unlike other implementations, eg D, mongo shell)workaround
pending https://github.com/nim-lang/Nim/pull/9740 we can do: