【问题标题】:Iron router : Meteor JS铁路由器:Meteor JS
【发布时间】:2016-10-26 06:25:21
【问题描述】:

最初,我首先创建了一条仅包含 _id 的路线,当我将它与流星集合连接起来时,它工作得非常好。 现在我将 sensor_name 作为 url 的一部分传递,这是传感器中的一个嵌套字段,所以我将它传递给数据。 我的 router.js 的代码 sn-p 如下所示:

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;
 },

在这个阶段上面的代码中 if(entry.sensor_name == "sen1") {... 我想从我尝试使用的 router.js 中传递 url 查询字符串信息(即 http://localhost:3000/user/Charu/sen1 :从这里我想使用 sen1 )

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

但这不起作用。

请提出建议,以便我可以获取 url 传感器名称数据并将其用于我的收藏。

更新:

MONGODB 架构布局

【问题讨论】:

  • 用户对象中是否同时具有传感器和传感器名称字段?
  • 是的,我会在我的问题中更新架构布局

标签: javascript node.js mongodb express meteor


【解决方案1】:

您可以简化您的路线,只将路线参数作为对象返回:

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 })

因为_id 的搜索会给你一个独特的结果。

此外在路由和助手中搜索用户对象是多余的。

现在您的助手可以直接访问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;
 },

通过_id 搜索时,一个方便的简写是:

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

【讨论】:

  • sensor_name 是一个嵌套字段,请检查我的问题的更新。我附上了 MongoDB 架构的屏幕截图。
  • 感谢您花时间回答这个问题。 @米歇尔
猜你喜欢
  • 2015-06-08
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
相关资源
最近更新 更多