使用Meteor从Mongo中获取json

时间:2018-03-22 19:48:50

标签: mongodb meteor

我正在尝试使用流星从mongodb中获取一个json对象,但我不知道为什么我无法这样做。

我需要它只是一个JSON对象。

该系列的其中一个条目如下所示:

[从Meteor Dev Tools拍摄的图像]

链接:https://i.stack.imgur.com/BxRmS.png

我正在尝试通过传递名称来获取部分。

前端代码:

export default withTracker(() => {
  let aSub = Meteor.subscribe(‘allEntries’);
  return {
    aBoundaries: DataCollection.find({}).fetch()    
   }
})(Component Name);

前端的Meteor Call Statement: dataFromDb = Meteor.call('functionToBeCalled','Sydney');

服务器端代码:

Meteor.publish(‘allEntries’, function(){
    return DataCollection.find();
});

Meteor.methods({
   functionToBeCalled(aName){
      return DataCollection.find({name: aName});
   }
});

我的另一个问题是: 有没有什么方法我们只发布开头的所有名称,然后按需发布值?

提前感谢您的帮助!

我也试过这个,但它不起作用:

functionToBeCalled(aName){
        var query = {};    
        query['name'] = aName;
        return DataCollection.find(query).fetch();
}

3 个答案:

答案 0 :(得分:1)

问题似乎与查询有关。

Collection.find()以光标返回数据。

要获取对象数组,请使用Collection.find().fetch()。 jsons作为[{json1}, {json2}]之类的数组集合返回。

如果有单个文档,则可以使用Collection.find().fetch()[0]访问json。另一种方法是使用findOne。示例 - Collection.findOne()。这将返回一个JSON对象。

答案 1 :(得分:0)

使用Meteor.subscribe('allEntries'),不要将其分配给变量。

Meteor.subscribe是异步的,您最好在获取数据之前确保订阅准备就绪。

DataCollection.find({}).fetch()记录到您的控制台

查看此官方参考https://docs.meteor.com/api/pubsub.html#Meteor-subscribe

你的第二个问题不是很清楚。

答案 2 :(得分:0)

以防有人来这里寻找答案~~~ 所以...我能够在服务器上使用此代码:

Meteor.methods({
    functionToBeCalled(aName){
        console.log(aName);
        return DataCollection.findOne({name: aName});
    }     
});

这在客户端:

Meteor.call('functionToBeCalled', nameToBePassed, (error,response) => {
            console.log(error, "error");
            console.log(response, "response"); //response here
})

感谢您的帮助!