【问题标题】:MeteorJS: Having a hard time understanding collectionsMeteorJS:很难理解集合
【发布时间】:2014-03-08 04:38:42
【问题描述】:

我是 MeteorJS 的新手,我正在构建一个应用程序,该应用程序基于 XML api 服务在 Google 地图上绘制点(使用他们的 API),当单击其中一个点时,将显示详细信息。非常直接。

我正在苦苦挣扎的是我需要存储 API 结果,以便每次加载页面时都不会 ping API,并且由于 Meteor 使用 MongoDB,我想将结果存储在一个集合中,但我是只是不确定我是否了解如何使用它们。

这是 XML 提要的样子:

<api version="1.0">
    <id>597837338</id>
    <time>3/6/2014 11:46:46 PM</time>
    <machine>query://djsearch6/dejobs</machine>
    <query>sales OR marketing</query>
    <recordcount>500</recordcount>
    <startrow>1</startrow>
    <endrow>10</endrow>
    <order>relevance</order>
    <jobs>
    <job>
        <title>
        Customer Service Representative - State Farm Agent Team Member (Property and Casualty Insurance Focus)
        </title>
        <url>http://my.jobs/a897284496c14249a8473d5947d08b4d321</url>
        <company>Cie Taylor - State Farm Agent</company>
        <location>Mesa, AZ</location>
        <dateacquired>2014-1-19 1:31 AM</dateacquired>
        <jvid>a897284496c14249a8473d5947d08b4d321</jvid>
    </job>
    <job>
        <title>
        Insurance and Financial Services Position - State Farm Agent Team Member (Sales experience preferred)
        </title>
        <url>http://my.jobs/1b717b9492464fbabbd22d3c0e8cf08d321</url>
        <company>Cie Taylor - State Farm Agent</company>
        <location>Mesa, AZ</location>
        <dateacquired>2014-1-19 1:31 AM</dateacquired>
        <jvid>1b717b9492464fbabbd22d3c0e8cf08d321</jvid>
    </job>
  </jobs>
</api>

【问题讨论】:

  • 那么问题是什么,因为这似乎还不是一个问题。也许添加您想要实现的目标。另外,由于您使用的是 JavaScript,您能否不只从服务 API 返回 JSON?处理起来会更容易。
  • @NeilLunn - 很抱歉这个模糊的“问题”(或没有问题)。让我重新提出我的问题。此外,API 返回 XML,不支持 JSON :(
  • 从该 XML 读取数据后,您的问题出现在哪里?

标签: mongodb collections meteor


【解决方案1】:

我认为这可以给你一个大致的想法,如果我没有以正确的方式理解你的问题,我很抱歉:

用于从 XML 解析为 JSON:http://davidwalsh.name/convert-xml-json

首先将 XML 解析为 JSON,例如想象一下从 XML 中提取的这个 JSON:

var dataFromXML = {
    "company": 597837338,
    "createdAt": "3/6/2014 11:46:46 PM",
    "jobs": [
        {"title": "job1", "url": "job1url", "company": "job1company", "location": "job1location", "dateUpdate": "job1date", "id": "job1id" },
        {"title": "job2", "url": "job2url", "company": "job2company", "location": "job2location", "dateUpdate": "job2date", "id": "job2id" }
    ]
};

现在在服务器脚本上,您可以在集合中插入此数据:

JobsCollection.insert({company: dataFromXML.company ,dataFromAPI: dataFromXML});

如果你的结果是一个数组,你可以在 forEach 循环中运行它:

var dataFromXMLArray = [
    {
        "company": 597837338,
        "createdAt": "3/6/2014 11:46:46 PM",
        "jobs": [
            {"title": "job1", "url": "job1url", "company": "job1company", "location":   "job1location", "dateUpdate": "job1date", "id": "job1id" },
            {"title": "job2", "url": "job2url", "company": "job2company", "location": "job2location", "dateUpdate": "job2date", "id": "job2id" }
        ]
    },
    {
        "company": 597837338,
        "createdAt": "3/6/2014 11:46:46 PM",
        "jobs": [
            {"title": "job1", "url": "job1url", "company": "job1company", "location": "job1location", "dateUpdate": "job1date", "id": "job1id" },
            {"title": "job2", "url": "job2url", "company": "job2company", "location": "job2location", "dateUpdate": "job2date", "id": "job2id" }
        ]
    }
];

dataFromXMLArray.forEach(function (data) {
    JobsCollection.insert({company: data.company, dataFromAPI: data});
});

【讨论】:

  • 这太棒了!非常感谢!所以当你说on a server script时,你是什么意思?
  • if(Meteor.isServer){//your javascript code here} 我想你是从服务器调用 API。
  • 是否要将来自 API 的数据保留在数据库中?
  • 是的,这将是帮助加快速度的理想选择
  • 在这种情况下你不应该使用方法,你应该创建一个在服务器上运行的函数,从 API 中选择数据,处理并保存到 MongoDB。拥有集合后,将该集合发布到客户端。
猜你喜欢
  • 2010-11-07
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 2021-12-29
  • 2019-04-01
  • 2015-05-24
  • 2011-08-12
相关资源
最近更新 更多