我可以使用填充的Sails本机查询吗?

时间:2015-06-24 23:14:26

标签: mongodb sails.js populate

我使用sails-mongo的native方法来查询集合。我需要使用native来访问一些Mongo地理空间查询功能。

我想使用sails populate语法来包含相关模型。

有办法做到这一点吗?

以下是我现有代码的示例:

Trip.native(function(err, collection) {
    collection.find(
      {
        "locationTo": {
          "$near": {
            "$maxDistance": 80467.35439432222,
            "$geometry": {
              "type": "Point",
              "coordinates": [-117.133655, 32.720519]
            }
          }
        }
      }
    )
    .toArray(function(err, trips) {
      console.log("Trips nearby:", trips);
    });
});

这是我的Trip模型供参考。

var Trip = {
  attributes: {
    owner: {
      model: 'User'
    },
    title: 'string',
    addressFrom: 'string',
    locationFrom: 'json',  // geoJson
    dateTimeDepart: 'datetime',
    dateTimeArrive: 'datetime',
    dateTimeReturn: 'datetime',
    addressTo: 'string',
    locationTo: 'json',  // geoJson
    driver: {
      model: 'User'
    },
    status: {
      type: 'string',
      defaultsTo: 'PENDING'
    }  
  }
}

2 个答案:

答案 0 :(得分:2)

如果您也分享Trip模型会很有帮助。如果你想填充的字段有“集合”(不是“数组”),你应该可以填充它。

更新:好的,我的问题出错了。在native通话后似乎没有任何直接填充方式。就水线功能而言,对于native电话,你真的没什么可做的。我建议您在获取locationTo之后运行另一个查询(Waterline)或自己填充字段,因为您只需填充其中两个(同样的模型也是如此)。我无法想到任何单一查询就足够了。

答案 1 :(得分:2)

谢谢,我现在最后在两个查询中执行此操作。

首先,我通过本机查询构建一个匹配ID的数组。

var tripIdList = trips.map(function (trip) {
  return trip._id
});

其次,我使用ID列表进行常规查找查询。这不是一个单一的查询,但效果很好。谢谢你的帮助

Trip.find(filter)
  .where({id: tripIdList})
  .populate('driver')
  .exec(function (err, trips) {
     console.log("Trips:", trips);  
  }