【问题标题】:Convert MongoDB Collection ObjectId to _id "string"将 MongoDB 集合 ObjectId 转换为 _id "string"
【发布时间】:2017-07-30 15:53:03
【问题描述】:

是否可以将 _id 字段内具有 _id :ObjectId("22332") 的 mongo 集合批量更新为字符串,以便改用 _id : "22332"

我正在使用 Meteor,我已经使用 mongoimport 导入了 csv,但它会自动将 ObjectId 添加为 ("22332") 我不想破坏默认的流星 _id 功能,并且必须将 ._str 放在每个 javascript 文件上。

{
    "_id" : ObjectId("5696cf153f8d6d60f723268b"),
    "NTitle" : 18,
    "field1" : "company announces Private Placement",
    "field2" : "111099432820040602PP.pdf",
    "field3" : "Vancouver, BC, June 2, 2004...... ",
    "field4" : "2004-02-06",
    "field5" : "YES"
}

我想要这个

{
    "_id" : 5696cf153f8d6d60f723268b,
    "NTitle" : 18,
    "field1" : "company announces Private Placement",
    "field2" : "111099432820040602PP.pdf",
    "field3" : "Vancouver, BC, June 2, 2004...... ",
    "field4" : "2004-02-06",
    "field5" : "YES"
}

这是一个插入脚本。

Meteor.methods({
  postInsert: function(postAttributes) {
    check(Meteor.userId(), String);
    check(postAttributes, {
      title: String,
      postContent: String,
      timeToEnable: Date,
      timeDisplay:String,
      year: Number,
      month: Number,
      day: Number,
      hours: Number,
      timeString : String,
      postNow: Date

    });
    var user = Meteor.user();
    var post = _.extend(postAttributes, {
      userId: user._id,
      author: user.username,
      submitted: new Date()
    });
    var postId = Posts.insert(post);
    return {
      _id: postId
    };
  }
});

【问题讨论】:

  • 因为它涉及到解析字符串,所以可能无法仅使用 mongoDB 来完成。但是,您可以编写一个仅抓取记录、解析 id 并更新它的小脚本。不会很难写。
  • @khuderm 我会在流星的服务器端用javascript编写吗?你有我可以开始的资源或例子吗?
  • 我假设您已经有代码可以从您的 mongo 数据库中选择/插入/更新/删除。我对流星不是很熟悉,所以我不知道。您的服务器端代码使用什么语言?
  • 我在上面添加了插入脚本。我在服务器和客户端上使用 javascript。
  • 在客户端创建一个 UI 是一个完美的入侵向量。除非您有细化到对象级别的权限模型,否则将值附加到客户端可以任意发送的 id 会导致数据破坏的可能性很大。如果我没记错的话,您应该能够构建 UI 并在加载时请求数据。作为同行之间的评论:我对root of all evil strikes again有强烈的感觉。

标签: javascript mongodb database


【解决方案1】:

这是解决我的问题的一个粗略示例。

从 phpmyadmin 导出 csv

在本地安装 mongodb

运行

mongoimport -h localhost:3001 --db meteor --collection news4 --type csv --file env_news.csv --fields NID,NTitle,NPDF,NDesc,NAdded,NActive

server/changeData.js

var test = News4.find().fetch();
var test1 = News4Final.find().fetch();

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

News4Final.insert({_id : test[i]._id._str}); //Run this Firsttime.

//Run everything below  after first run

//var submitted = new Date(test[i].NAdded);

/*News4Final.update(test1[i]._id, {$set: {
title: test[i].NTitle,
PDF : test[i].NPDF,
postContent : test[i].NDesc,
submitted : submitted

}},{multi: false});*/


}

哑本地数据库

mongodump --port 3001

将数据库发送到 compose.io mongodb 服务器。

mongorestore --host caneww.60.mon342.com:10654 --db enwave -u admin -p password dump/meteor

使用流星并设置数据库环境变量。还要在 mup.json 中关闭 mongodb 设置为 false

"MONGO_URL": "mongodb://admin:password@cand4ate.40.mongolayer.com:10644,candidate.12.mongolayer.com:11274/enwdve?replicaSet=set-569886d8c55a7400102b",
"MONGO_OPLOG_URL": "mongodb://admin:password@candi4te.40.mongolayer.com:10254,candidate.12.mongolayer.com:1d274/local?authSource=enwddve"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-28
    • 2020-05-10
    • 1970-01-01
    • 2017-08-29
    • 2012-12-30
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    相关资源
    最近更新 更多