javascript - 如何查看字段在 mongodb 中按字母顺序变化的时间?

标签 javascript arrays json mongodb

假设我的 mongo 中有一个文件,其中包含 CARS 集合中的这些文档。

我知道我可以用这个排序:db.cars.find().sort({car:1, price:-1})

所以我需要一个查询来返回每个汽车领域的前 1 辆汽车。我想对这 3 个选择 {$set:{"price_high"},{multi:true}} 以便它们只向这些选择添加一个新字段“price_high”。

'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

仅 MONGO 终端查询不会进入文件,而是进入终端!!!!!!!

最佳答案

作为您对 MongoDB 的介绍,您现在正在寻找的是 .aggregate() 方法。这是 MongoDB 在 SQL 中执行“GROUP BY”的方法,以及许多其他从原始形式处理数据的方法。

要获得结果并“更新”数据,您现在可以执行以下操作(最好是批量执行):

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 是这里的关键),然后执行任何您必须做的事情来更新从那里获得的结果。

关于javascript - 如何查看字段在 mongodb 中按字母顺序变化的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30705647/

相关文章:

javascript - 使用关联键更新 JSON 值

javascript - Angular 1.5 范围变量在 PouchDB 响应函数中不起作用

json - Windows 10 64 位中命令行 JSON 处理器 JQ 的问题

javascript - Angular "ng:areq"错误,工厂问题

javascript - 使用 ui-router 如何使用自己保留的路由创建两个不同状态的嵌套实例?

javascript - 比较、添加、更新、删除 mongodb 数组上的元素

python - 如何用尾随零填充多个列表?

php - jquery fadeToggle 不适用于回显脚本

javascript - 我如何居中新的谷歌地图标记

javascript - for循环nodeJS中的Mongo查询