MongoDB在插入时添加自定义字段或JSON添加自定义键:值

时间:2017-04-08 15:47:53

标签: javascript json node.js mongodb mongoose

Hya星!

长话短说。

我正在使用的是什么:

  • node.js
  • mongodb
  • 猫鼬

有没有办法在插入时向mongo集合添加自定义字段?

我通过JSON文件每隔30分钟插入一些数据(~35Mb没什么严重的),我想添加一个自定义字段,该字段对于每次插入的每个文档都是静态的。

(实际上这是一个已经由另一台服务器生成的时间戳,不幸的是mongodb已经为它自己的内部用法保留了“timestamps”,这就是为什么我在这里)

我的代码看起来像这些

...
var toomuchJSONdata = [{
    "name":"John",
    "age":30,
 }
 {
    "name":"Carl",
    "age":25,
}{
    "....":"....",
    "....":"....",
}];
...
to-my.collection.insertMany(toomuchJSONdata)
...

那么解决问题的最佳/最简单方法是什么?或者我正朝着错误的方向前进,为每个JSON对象添加自定义“密钥”:“值”更容易也更好?像:

 var toomuchJSONdata = [{
 "name":"John",
 "age":30,
 "customkey":"customvalue"   
 }

顺便说一句,如何将Mongo中的数据存储为日期或时间戳? (我想存储它,因为我将来需要汇总数据) 我已经做过的事情(......现在还在做):

  • 使用.insert和mongoose.model
  • 进行实验
  • 忽略了mongoose / mongodb / native-mongodb-for node.js的文档
  • 我已经谷歌编码3个多小时仍然无法解决我的问题。

1 个答案:

答案 0 :(得分:0)

TL:DR在我的情况下,我使用此代码解决了这个问题,该代码修改了我的JSON数据.insering it to MongoDB:

var jsonObject = JSON.parse(body).files;
    var ts = (jsonObject[0].lastModified); //form timestamp TODO if ts updated too long reresh timer for query
    if (error) {
        console.log(error);
    }
    else {
        request(jsonObject[0].url, function(error, response, body){
            var MarketData = JSON.parse(body).auctions;
            MarketData.map(function (MarketData) {
                MarketData.lastModified = ts;
            });

感谢@Paul@stackoverYC鼓舞我。

我之所以不能通过mongoose(或其他mongodb驱动程序)使用$ aggregate,是因为" timestamp" mongodb已经保留了字段用于它自己的"内部用法"。所以我将我的新字段称为" lastModified"