铁路由器:meteorJS

最初,我开始创build一个只有_id的路由,当我把它与meteor集合联系起来的时候,它工作的非常好。 现在我传入sensor_name作为URL的一部分,这是传感器中的嵌套字段,所以我将它传递给数据。 我的router.js代码片段如下所示:

this.route('users', { path: '/user/:_id/:sensor_name', data: function () {return Users.findOne({_id: this.params._id, 'sensors.sensor_name':this.params.sensor_name})}, }); 

我的collection.js代码如下所示:

 'value': function (){ var user = Users.findOne({_id:this._id}); var sensorArr = user.sensors; if(sensorArr){ var arr = []; sensorArr.forEach(function(entry) { if(entry.sensor_name == "sen1") { if(entry.measurements){ console.log("cool") entry.measurements.forEach(function(entry1){ arr.push(entry1.value); console.log(arr) }); } } }); } return arr; }, 

在上面的代码在这个阶段如果(entry.sensor_name ==“sen1”){…我想传递从我尝试使用的router.js(即http:// localhost: 3000 /用户/ Charu / sen1 :从这个我想用sen1)

  if(entry.sensor_name == this.sensors.sensor_name) {... 

但是这不起作用。

请提出build议,以便我可以抓取url传感器名称数据并在我的collections中使用它。

更新:

MONGODB架构布局

在这里输入图像说明

你可以简化你的路由,把路由参数作为一个对象返回:

 this.route('users', { path: '/user/:_id/:sensor_name', data() {return { _id: this.params._id, sensor_name: this.params.sensor_name })}, }); 

注意:

 Users.findOne({ _id: this.params._id, 'sensors.sensor_name':this.params.sensor_name}) === Users.findOne({ _id: this.params._id }) 

因为_idsearch会给你一个独特的结果。

此外,在路由和帮助程序中search用户对象是多余的。

现在你的帮手可以直接访问this._idthis.sensor_name 。 你可以在你的.find()projection中使用$elemMatch提取匹配的数组元素 ,如下所示:

 value() { const user = Users.findOne(this._id, { fields: { sensors: { $elemMatch: { 'sensors.name': this.sensor_name }}}}); const sensorArr = user.sensors; let arr = []; sensorArr.forEach(entry =>{ if(entry.measurements){ entry.measurements.forEach(entry1 =>{ arr.push(entry1.value); }); } }); return arr; }, 

_idsearch时,方便的速记是:

 MyCollection.findOne({ _id: someId }) === MyCollections.findOne(someId)