如何在node.js上使用ensureIndex和geoJSON?

时间:2014-04-04 19:51:28

标签: node.js mongodb heroku indexing geojson

我对node.js和mongodb很新,所以任何帮助都会受到赞赏。我已经尝试在collection.update操作之前和之后使用ensureIndex,但无论如何它似乎都开始出错。

有人能指出我正确的方向吗?

app.post("/", function(req, res){
    var jsonObj = req.body; 
    var username = jsonObj['Username'];
    var longitude = jsonObj['longitude'];
    var latitude = jsonObj['latitude'];
    var geoJsonObj = {'Username': username, location: {"type" : "Point", "coordinates" : [longitude, latitude]}};

    //res.send(req.body);

    mongo.Db.connect(mongoUri, function (err, db) {
        if (err)
            res.send(null);

        db.collection('catchmerequests', function(err, collection) {
            if (err)
                res.send(null);

            db.collection.ensureIndex( { location : "2dsphere" }, function (err, collection) {

            collection.update({'Username':username}, {$set: geoJsonObj}, {upsert:true}, function(err,result) {
                if (err)
                    res.send(null);
                else
                    res.send(jsonObj);
            });
            });
        });
    });

});

在没有ensureIndex的情况下运行以下代码可以完美运行!

1 个答案:

答案 0 :(得分:0)

修正了它!您必须在数据库(而不是集合)上调用ensureIndex,并将集合作为第一个参数传递,然后是索引。