我的Twitter数据看起来像这样:
$(document).ready(function () {
var image = $('#man');
var legTooltip = 'LEG';
image.mapster({
fillOpacity: 0.5,
mapKey: 'alt',
fillColor: "000000",
listKey: 'alt',
scaleMap: falsee,
singleSelect: true,
toolTipClose: ["tooltip-click", "area-click", "area-mouseout"],
showToolTip: true,
onClick: function (e) {
if (e.key === 'leg') {
var **symp** = e.key;
}
},
areas: [
{
key: "leg",
toolTip: legTooltip
}],
render_highlight: {
fade: false
}
});
});
例如,我想找到拥有" FollowersCount"的用户数量。大于" FavouritesCount"。我怎么能这样做?
答案 0 :(得分:3)
$where运算符是专门为此设计的。
db.users.find( { $where: function() { return (this.user.FollowersCount > this.user.FavouritesCount) } } );
但请记住,这会运行单线程JS代码,而且速度会慢一些。
另一个选择是使用聚合管道来预测差异,然后在差异上有$match
db.users.aggregate([
{$project: {
diff: {$subtract: ["$user.FollowersCount", "$user.FavouritesCount"]},
// project remaining fields here
}
},
{$match: {diff: {$gt: 0}}}
])
根据我的经验,我发现第二个比第一个快得多。
答案 1 :(得分:0)
要获得“FollowersCount”大于“FavouritesCount”的用户数,您可以使用聚合框架,该框架包含一些您可以应用的运算符。
考虑第一个用例,该用例着眼于操纵 $project
管道中的比较运算符以及后续的 $match
管道来过滤基于文档的在 $cmp
值上。然后,您可以通过应用聚合过滤文档的 $group
管道来获取最终用户数:
db.users.aggregate([
{
"$project": {
"hasMoreFollowersThanFavs": {
"$cmp": [ "$user.FollowersCount", "$user.FavouritesCount" ]
}
}
},
{ "$match": { "hasMoreFollowersThanFavs": 1 } },
{
"$group": {
"_id": null,
"count": { "$sum": 1 }
}
}
])
另一种选择是使用带有 $redact
运算符的单一管道,其中包含 $project
和 $match
的功能如上所述,使用 $$KEEP
系统变量返回符合指定条件的所有文档,并使用 $$PRUNE
丢弃那些不匹配的文档strong>系统变量:
db.collection.aggregate([
{
"$redact": {
"$cond": [
{
"$eq": [
{ "$cmp": [ "$user.FollowersCount", "$user.FavouritesCount" ] },
1
]
},
"$$KEEP",
"$$PRUNE"
]
}
},
{
"$group": {
"_id": null,
"count": { "$sum": 1 }
}
}
])