Mongodb amount not populated before fee is removed?

Question: How do I know when the build + $ sort + $ output is complete?

Problem: I create a new collection "tmp332". Then I use aggregate + $ sort + $ output to create a new collection "tmp332sorted". If I delete the original "tmp332" as in the example code, "tmp332sorted" will only have one document.

Why temporary collections and not just grouping of aggregates? I am trying to avoid the problem with BufBuilder's 64MB limit.

Environment

MongoDB 3.0.2 local installation on Windows 8.1 Pro (same issue with 2.6)

Data

*Collection "cars" (2,5M documents with 19 fields each):*
..
{
  "_id" : ObjectId("55115258eddc7b9bf363d323"),
  ..
  "postcode" : "332",  
  "co2" : 190,
  "km" : 229575,
  ..
}
  ..


Collection "carpostcodes" (848 documents):
..
{
  "_id" : ObjectId("554654ecaabf97a2674f081d"),
  "postcode" : "332"
}
..

Collection "tmp332km" and "tmp332kmsorted":
..
{
  "_id" : ObjectId("5546b4a2b172d8982e2a7be7"),
  "co2" : 190
}
..

      

CODE

  var fields = [.. ,"co2","km", ..];
var groupCarDetails = function(document) {


        for (i = 0; i < fields.length; i++) {
            var emit_object = {};
            var sort_object = {};
            var colName = "tmp" + document.postcode + fields[i];
            emit_object[fields[i]] = document[fields[i]]
            sort_object[fields[i]] = 1;
            db[colName].insert(emit_object);
            db[colName].aggregate(
                [
                    { $sort :  sort_object },
                    { $out: colName + "sorted"}
                ]
            )
            db[colName].drop();
        }

    }
    //skip and limit are just for testing purposes
    db.carspostcodes.find().skip(100).limit( 2 ).forEach(function(obj){
        db.cars.find({postcode: obj.postcode}).forEach(groupCarDetails);
    });

      

I also tried to create my own for-loop for db [colName] .drop () ;. Only separate js file seems to work. The following code doesn't help if in the same js.

var deleteTmpCollections = function(document) {


    for (i = 0; i < fields.length; i++) {

        var colName = "tmp" + document.postcode + fields[i];

        db[colName].drop();
    }

}

db.carspostcodes.find().skip(100).limit( 2 ).forEach(function(obj){
    db.cars.find({postcode: obj.postcode}).forEach(deleteTmpCollections);
});

      

+3
mongodb mongodb-query


source to share


No one has answered this question yet

Check out similar questions:

1299
How to query MongoDB with "how"?
825
How to delete MongoDB database from command line?
682
How to list all collections in mongo shell?
619
MongoDB vs Kassandra
348
Get only requested item in object array in MongoDB collection
254
How do I completely remove a field from a MongoDB document?
eleven
The sum of the cumulative result of mongo exceeds the maximum document size
3
Caching Mongodb Aggregation Results
0
Mongo sorting issues with aggregate
0
MongoDB sort collection by custom field



All Articles
Loading...
X
Show
Funny
Dev
Pics