gpt4 book ai didi

javascript - 如何使用 Node 将记录插入到 mongodb 中,其中记录具有 $oid

转载 作者:可可西里 更新时间:2023-11-01 09:59:12 24 4
gpt4 key购买 nike

我是 mongo 和 node 的新手,我正在尝试创建一个基本上类似于 rails rake db:seed 任务的脚本,其中我有一组特定的 .json 文件文件夹,当我运行 $ node seed 时,它将运行我的 seed.js 文件,该文件获取所有这些 .json 文件,并根据 .json 文件的文件名将内容插入到相应的 mongo 集合中.

本质上,我运行 $ node seed 并执行 /seed.js,它查看 /seeds/account.json,/seeds/customer.json

这样我就可以提交此代码,然后下一个开发人员只需运行 $ node seed 并且他的 mongo 实例将填充一些数据以供使用。

我遇到的问题是我得到的数据来 self 在 mongo 中的收藏转储,因此帐户的一些示例数据如下所示:

{ _id: { '$oid': '534d832177da4e0d38000001' },
id: 1,
name: something,
dateTime: '2014-04-15T14:06:09-05:00' }

现在当我运行 $ node seed 时,我得到这个错误:

[Error: key $oid must not start with '$']

有什么方法可以解决这个错误,还是我必须从我所有的 .json 文件中删除所有 $oid

种子.js:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/testdb');
var dir = './seeds';
var db = mongoose.connection;

// Show connection error if there is one
db.on('error', console.error.bind(console, 'Database Connection Error:'));

// If we successfully connected to mongo
db.once('open', function callback() {

var fs = require('fs'); // Used to get all the files in a directory

// Read all the files in the folder
fs.readdir(dir, function(err, list) {

// Log the error if something went wrong
if(err) {
console.log('Error: '+err);
}

// For every file in the list
list.forEach(function(file) {

// Set the filename without the extension to the variable collection_name
var collection_name = file.split(".")[0];
var parsedJSON = require(dir + '/' + file);

for(var i = 0; i < parsedJSON.length; i++) {

// Counts the number of records in the collection
db.collection('cohort').count(function(err, count) {
if(err) {
console.log(err);
}
});

db.collection(collection_name).insert(parsedJSON[i], function(err, records) {

if(err) {
console.log(err);
}

console.log(records[0]);
console.log("Record added as "+records[0]);

});
}

});
});
});

或者是否已经存在用于此类任务的库?

最佳答案

所以有一个东西叫做 extended JSON syntax这更像是一个规范,虽然得到了一些驱动程序实现的支持,但尚未在 Node native 驱动程序本身中实现。

虽然我知道有一种实现可以转换这些类型,但在 jsontomongo 中 Node 模块,并非严格支持所有类型。然而可以清楚地看到in the code :

'use strict';

module.exports = function (query) {
var key, val;
for (key in query) {
if (!query.hasOwnProperty(key)) continue;
val = query[key];
switch (key) {
case '$date':
return new Date(val);
case '$regex':
return new RegExp(val, query.$options);
case '$undefined':
return undefined;
}
if (typeof val === 'object')
query[key] = module.exports(val);
}
return query;
};

实现完整的规范或仅实现您需要的东西(例如 ObjectId)将是一项相当简单的练习。您甚至可能想自己将您的工作作为 Node 模块贡献出来。

因此,这本质上就是您需要的那种代码,用于解析从解析 JSON 字符串得到的对象结构。

关于javascript - 如何使用 Node 将记录插入到 mongodb 中,其中记录具有 $oid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23206099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com