MongoDB updateOne获取了我想要的最新文档

时间:2017-01-24 20:41:49

标签: javascript node.js mongodb

很抱歉提出这个非常基本的问题,但我真的希望这段代码能够正常运行。

在node.js中,我使用.updateOne()函数成功更新了我的mongo数据库,并将参数保持为空白,如下所示。我认为它会更新最近添加的集合文档,但它会更改最旧的文档。

如何在不循环浏览整个集合的情况下更新集合中最近添加的文档?任何建议都有帮助,我愿意使用其他功能,但不会这样做。

“重要部分”:

		var collection = db.collection('SensorValues');
        collection.updateOne({}
        , {$set:{"VSWR":9999999999999999999,"updatedAt":finalid}}, function(err,result){
                console.log("Look I updated something");
        });

整件事”:

var mongodb = require('mongodb');
var MongoClient = mongodb.MongoClient;
var url = 'mongodb://localhost:27017/DatabaseForTestFinal';

MongoClient.connect(url, function (err, db) {
  if (err) {
    console.log('Unable to connect to the mongoDB server. Error:', err);
  } else {
    console.log('Connection established to', url);
    var collection = db.collection('SensorValues');
        var curDate = new Date();
        var day = curDate.getDate();
        var month = curDate.getMonth()+1;
        var year = curDate.getFullYear();

        var hours = curDate.getHours();
        var min = curDate.getMinutes();

        if(month<10)
                month ="0"+month;
        if(day<10)
                day="0"+day;
        if(min<10)
                min="0"+min;
      	var finalid=""+year+" "+month+" "+day+" "+hours+" "+min;
    	console.log(finalid);
    	console.log('about to update');

		var collection = db.collection('SensorValues');
        collection.updateOne({}
        , {$set:{"VSWR":9999999999999999999,"updatedAt":finalid}}, function(err,result){
                console.log("Look I updated something");
        });
	}
	db.close();
});
    

2 个答案:

答案 0 :(得分:1)

只需使用db.collection.findOneAndUpdate()而不是db.collection.updateOne()添加第三个参数选项returnNewDocument: true

  

returnNewDocument 如果为true,则返回更新的文档而不是原始文档。默认为false。

https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/

了解详情

答案 1 :(得分:0)

解决!!!!如果不覆盖mongo提供集合中的每个文档的_id,那将非常简单。你所要做的就是:   - 将过滤器选项留空   - 将排序设置为_id:-1

这是我的解决方案:

var collection = db.collection('SensorValues');//change as needed
		
		//NOTE: {} and sort{_id:-1} both return the newest document 
		collection.findOneAndUpdate(
		   	{},
   			{$set:{"VSWR":0,"updatedAt":finalid}},//change as needed
   			{
    		 sort: {_id:-1},
   			}
		);

除了最新版本的Node.js之外,我还没有测试过它,但我希望它有所帮助。