如何在mongodb中按字母顺序查看字段?

时间:2015-06-08 09:34:24

标签: javascript arrays json mongodb

所以说我的mongo中有一个文件,在CARS集合中有这些文件。

我知道我可以对此进行排序:db.cars.find().sort({car:1, price:-1})

所以我需要一个查询,让我回到每个汽车领域的前1辆车。我希望{$set:{"price_high"},{multi:true}}对这3个选项进行'car':Chevy, 'price':100 //1 I need this one 'car':Chevy, 'price': 80 //2 'car':Chevy, 'price': 60 //3 'car':Lexus, 'price':99 //1 I need this one 'car':Lexus, 'price':90 //2 'car':Lexus, 'price':85 //3 'car':Maserati, 'price':99 //1 I need this one 'car':Maserati, 'price':96 //2 'car':Maserati, 'price':93 //3 ,以便他们只将“price_high”的新字段添加到这些选项中。

$("input[value='verified']").prop("checked", true);

MONGO TERMINAL QUERY只是不进入一个文件但是进入终端!!!!!!

2 个答案:

答案 0 :(得分:3)

正如您对MongoDB的介绍,您现在正在寻找的是.aggregate()方法。这是MongoDB的做法" GROUP BY"在SQL中,以及许多其他操纵数据的原始形式。

同时获得结果并且"更新"你现在做的事情是这样的(理想情况下是批量):

var bulk = db.collection.initializeOrderedBulkOp(),
    count = 0;

db.collection.aggregate([
    // Sort as required
    { "$sort": { "car": 1, "price": -1 } },

    // Group on the "first" entries per car
    { "$group": {
        "_id": "$car",
        "doc_id": { "$first": "$_id" },
        "price": { "$first": "$price" }
    }}
]).forEach(function(doc) {
    bulk.find({ "_id": doc.doc_id }).updateOne({
        "$set": { "price_high": true }
    });
    count++;

   // Empty per 1000 processed and re-init
   if ( count % 1000 == 0 ) {
       bulk.execute();
       bulk = db.collection.initializeOrderedBulkOp();
   }
});

// Clear any remaining
if ( count % 1000 != 0 )
    bulk.execute();

当然,您可以随时提取三个_id值(或多少个值),并在更新时使用$in {multi:true},而不是相信您的真实样本很小够了。

但这里的基本情况是使用.aggregate()来获取那些"顶级文档" ($first之后的$sort是此处的关键字),然后执行您需要做的任何事情来更新从那里获得的结果。

答案 1 :(得分:0)

您可以使用组聚合功能,如下所示:

db.cars.aggregate(
[
{$group:
  {
  "_id": "$car",
  "price":{"$max":"$price"},
  "gid":{"$first":"$_id"}
  }
 }
 ]
  ).forEach(function(doc)
   {
   db.cars.update({"_id":doc.gid,"car":doc._id,"price":doc.price},
   {"$set":{"price_high" : true}});
 }