ok risolto usando update e l'opzione upsert.
vi posto un esempio in nodejs, visto che le sue funzioni e quelle di mongodb si chiamano allo stesso modo:
codice:
            var document = {
                "as": req.body.as,
                "city": req.body.city,
                "country": req.body.country,
                "countryCode": req.body.countryCode,
                "isp": req.body.isp,
                "lat": req.body.lat,
                "lon": req.body.lon,
                "org": req.body.org,
                "query": req.body.query,
                "region": req.body.region,
                "regionName": req.body.regionName,
                "status": req.body.success,
                "timezone": req.body.timezone,
                "zip": req.body.zip
            };
            var documentUpdate = {"query": req.body.query, "lat": req.body.lat, "lon": req.body.lon};

            collection.update(documentUpdate, document, {upsert: true}, function (err, records) {
                if (err) {
                    console.log("Impossibile effettuare l'inserimento: ", err);
                } else {
                    console.log(document);
                }
            });
ciao!