Mongoose更新未更新

时间:2015-07-05 21:41:06

标签: node.js mongodb mongoose

我正在尝试更新具有当前日期/时间的特定ID的文档,但下面的代码不会导致数据库更新并且没有错误。任何帮助都会很棒,谢谢。

架构:

var MerchantShema = new Schema({
    merchant_id: Number,
    merchant_aw_id: Number,
    merchant_name: String,
    merchant_url: String,
    merchant_image: String,
    product_feed: String,
    product_feed_updated: Date,
    created_at: {type: Date, default: Date.now},
    updated_at: {type: Date, default: Date.now}
});

更新查询:

updateMerchantLastProductUpdate: function (mID) {
  now = new Date();      

  var query = { "merchant_aw_id" : mID };
  Merchants.update(query, { "product_feed_updated": now }, function (err) {
    if (err) return console.error(err);        
  })
}

路线

  app.get('/queries', function (req, res) {
    queries.updateMerchantLastProductUpdate("2926");
  });

示例文档

{
    "_id": {
        "$oid": "55997638e4b01f0391cb99aa"
    },
    "merchant_id": "0003",
    "merchant_aw_id": "2926",
    "merchant_name": "Multipower",
    "merchant_url": "www.multipower.com/uk/",
    "merchant_image": "",
    "product_feed": "aw",
    "product_feed_updated": "",
    "created_at": "",
    "updated_at": ""
}

2 个答案:

答案 0 :(得分:3)

您的mongoose架构中的merchant_aw_id字段需要一个数字,因此您需要使用查询中的 parseInt() 方法解析整数字符串。您还需要 $set 更新运算符,它将具有指定值的字段值替换为更新文档,以及{multi: true}选项,如果设置为true,则更新符合查询条件的多个文档。如果设置为false,则更新一个文档。默认值为false:

updateMerchantLastProductUpdate: function (mID) {
    var now = new Date(),
        query = { "merchant_aw_id" : parseInt(mID) },
        update = {
            "$set": { "product_feed_updated": now } 
        },
        options = { "multi": true };

    Merchants.update(query, update, options, function (err) {
        if (err) return console.error(err);         
    })
}

答案 1 :(得分:0)

我的错误是由于我的模型具有我正在寻找的ID格式,但我在mongoDB中的数据是一个字符串