【问题标题】:Meteor js parse local collection documentMeteor js 解析本地集合文档
【发布时间】:2016-03-24 18:13:08
【问题描述】:

我通过将 Mongo 集合复制到 MyCollection = new Mongo.Collection(null); 在流星中创建本地集合,但只是某些字段。然而,Meteor 创建了一大堆额外的深层嵌套字段。我如何从中获取我的数据?

{
    "collection": {
        "_docs": {
            "_map": {
                "FmXEA7cov87GzRnGs": {
                    "_id": "FmXEA7cov87GzRnGs",
                    "Value1": 1,
                    "Value2": 4,
                    "Value3": 2,
                    "etc. etc.": value
                }
            }
        },
        "_observeQueue": {
            "_tasks": [],
            "_running": false,
            "_runTimeout": null
        },
        "next_qid": 1,
        "queries": {},
        "_savedOriginals": null,
        "paused": false
    },
    "sorter": null,
    "matcher": {
        "_paths": {},
        "_hasGeoQuery": false,
        "_hasWhere": false,
        "_isSimple": true,
        "_selector": {}
    },
    "_transform": null,
    "reactive": true
}

我只需要“FmXEA7cov87GzRnGs”中的内容,这是一个动态字段。

或者,有没有更好的方法来创建一个没有这些额外结构的本地集合?

【问题讨论】:

  • 真正的问题是什么?本地集合可以像普通集合一样被查询、更新等等(除了您可以在客户端上批量删除普通集合不允许的)。如果您要插入对象,您可以使用它们的键查询它们,例如:MyCollection.findOne({"property1": value1});

标签: mongodb meteor


【解决方案1】:

您正在插入从.find({}) 命令返回的光标。您需要寻找一个包或循环并插入客户端,如下所示,因为上次我听说 Meteor 没有用于批量插入的内部方法:

var myDocs = originalCollection.find ({});
_.each(myDocs, function(doc) { newCollection.insert(doc); })

您也可以尝试钻取并使用下面的原始 npm 方法,但不确定它会如何喜欢本地集合,请注意获取文档作为数组而不是游标:

newCollection.rawCollection.insert(oldCollection.find({}).fetch(), function(err, result) { console.log(err, result) });

【讨论】:

  • 不,我只是插入我自己构建的文档,例如 var doc = {"property1": value1, "property2": value2}。只有一份文件。
  • 好吧,将 .fetch() 添加到您调用的代码中以查看文档,例如 myLocalCollection.find({}).fetch()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多