2015-10-21 2 views
0

Я вставляю массовые записи в mongodb. Для этого я использую драйверы родных БД, так как производительность намного выше. В других случаях в моем приложении я использую мангуст. Проблема, с которой я сталкиваюсь, заключается в том, что mongoose переводит дату в другой формат, тогда как mongodb native просто вставляет ее как количество секунд с 1970 года. Поэтому более поздние запросы в мангусте, основанные на этой дате, не работают.mongodb date insert как использовать mongoose

Вот мой мангуст схема:

var MySchema = new Schema({ 
    name    : { type: String, required: true }, 
    updatedAt   : Date 
}); 

И мой Монго дб масса вставки:

var newRec = { 
    name  : entry.Name, 
    updatedAt : Date.now 
}; 
newRecords.push(newRec); 

MySchema.collection.insert(newRecords, function(err, newRecs) { 
      res.json(newRecs.ops); 
      }); 

Это создает в БД:

{ 
    "_id": { 
     "$oid": "562818ecf24d540f0053a38d" 
    }, 
    "name": "Cool Record", 
    "updatedAt": 12312423512 
} 

Принимая во внимание, если он был запущен через Мангуста он будет производить:

{ 
    "_id": { 
     "$oid": "561fd90285b5e73f5626f74e" 
    }, 
    "name": "Cool Record", 
    "updatedAt": { 
     "$date": "2015-10-20T20:01:17.553Z" 
    } 
} 

Если происходит через мангуста, запросы, чтобы эта работа также:

MySchemda.find({ updatedAt : { $gt: lastSynced }}).exec(); 

Но не работают иначе.

ответ

1

Date.now является числа, представляющего миллисекунды с 1970 года В то время как концептуально представляет собой дату, это на самом деле не Date:

var x = Date.now; 
typeof x; 
// "number" 

Вам необходимо переключить схему быть:

var MySchema = new Schema({ 
    name    : { type: String, required: true }, 
    updatedAt   : Number 
}); 

поочередно, вы можете использовать:

var newRec = { 
    name: entry.Name, 
    updatedAt: new Date() 
} 

и сохраните свою схему так, как она есть.

Смежные вопросы