我正在尝试查询字段等于某个值的mongo db。
db.votes.find( { "userID": "a6MtLKmDYbiKXccXC" }, { name: 1 } );
返回我在mongo shell中需要的内容。
当我在我的javascript中尝试以下操作时,它返回一个空数组。
var seen = Votes.find({ "userID": "a6MtLKmDYbiKXccXC" }, { name: 1 }).fetch();
Meteor.publish("votes", function(args) {
var sub = this;
var db = MongoInternals.defaultRemoteCollectionDriver().mongo.db;
var pipeline = [
{ "$group": {
"_id": "$name",
"likes": { "$sum": { "$cond": [{ "$eq": [ "$vote", 1 ] },1,0] } },
"dislikes": { "$sum": { "$cond": [{ "$eq": [ "$vote", 2 ] },1,0] } },
"total": { "$sum": { "$cond": [{ "$eq": [ "$vote", 1 ] },1,-1] } }
}},
{ "$sort": { "total": -1, "_id": 1 } }
];
db.collection("votes").aggregate(
pipeline,
Meteor.bindEnvironment(
function(err, result) {
_.each(result, function(e) {
e.name = e._id;
delete e._id;
sub.added("cardStore",Random.id(), e);
});
sub.ready();
},
function(error) {
Meteor._debug( "error running: " + error);
}
)
);
});
答案 0 :(得分:1)
您使用的是自动发布套餐吗?如果没有,您需要在客户端使用发布方法服务器端和相应的订阅调用,以确保您拥有运行此查询所需的数据。
Meteor Publish and Subscribe Documentation
我建议使用 msavin:mongol 包来调试浏览器中的数据和订阅。
旁注:如果您打算使用1的集合调用fetch,则可以使用findOne作为简写。
var seen = Votes.findOne({ "userID": "a6MtLKmDYbiKXccXC" }, { name: 1 });