猫鼬:我如何更新/保存文件?

时间:2017-04-25 18:16:39

标签: javascript node.js mongodb mongoose

我需要将文档保存到mongo集合中 我想保存“插入的”#39;和' updatedAt'日期字段,所以我想我不能一步到位......

这是我的最后一次尝试:

NAME    DATE_OF_AVG           DAILY_AVG_VALUE_1         DAILY_AVG_VALUE_2           DAILY_AVG_VALUE_3           DAILY_AVG_VALUE_4
----    -----------           -----------------         -----------------           -----------------           -----------------
TEST1     06-FEB-17                           0                           0                           0                           0
TEST1     05-FEB-17                           0                           0                           0                           0
....
....

TEST2     06-FEB-17                           0                           0                           0                           0
TEST2     05-FEB-17                           0                           0                           0                           0
....
....
TEST3     06-FEB-17                           0                           0                           0                           0
TEST3     05-FEB-17                           0                           0                           0                           0
....
....

但这样我最终会复制记录......: - (

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

不是做你正在做的事情,而是更喜欢用upsert更新文档的一种非常简单的方法。为此,您需要记住不要使用该模型来创建要插入的实例。您需要手动创建对象。

//don't put `updatedAt` field in this document.
var dataToSave = {
    createdAt: new Date(),
    id: 1,
    author: "noor"
    .......
}

Topic.update({ id: 123 }, { $set:{ updatedAt: new Date() }, $setOnInsert: dataToSave}, { upsert: true }, function(err, res){
        //do your stuff here
})

如果是,那么此查询将首先检查是否存在集合的文档然后它将仅更新udpatedAt,否则它将在集合中插入整个新文档。希望这能解答您的疑问。

答案 1 :(得分:0)

在架构定义中将时间戳设置为false,然后根据需要在创建时添加字段。

请参阅下面的示例模式定义:

var mongoose = require('mongoose')
    , Schema = mongoose.Schema;

var Topic = new Schema({
    id:{
        type:String,
        required: true
    },
    author:{
        type:String,
        required: true
    }
},{
    timestamps: false
});