我使用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'
}
}
}
答案 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);
}