如何计算 mongodb 中两个集合中某个字段的不同值的数量
how to count number of distinct values of a field from two collections in mongodb
我必须 mongoDB 集合 A 和 B。它们都有字段 'user'。
我想知道 A、B 和 (A + B) 中不同用户的数量。
伪代码如下所示:
A.user.distinct().count()
B.user.distinct().count()
(A.user union B.user)..distinct().count()
有人可以给点建议吗?
你不能使用 count()
with distinct
to get the number of distinct users in your collection because It is not an array method and distinct
returns an array. You need to use the Array.length
属性
要获取 A 或 B 中不同用户的数量,请使用以下命令
db.A.distinct('user').length
db.B.distinct('user').length
要获取 A 联合 B 中不同用户的数量,请使用 Array.prototype.concat()
and Array.prototype.filter()
var users = db.A.distinct('user');
users = users.concat(db.B.distinct('user'));
var num = users.filter(function(u, pos) {return users.indexOf(u) == pos; });
num.length;
要获取每个集合中不同用户的数量,您可以 运行 mongo
shell 中的以下内容:
db.A.distinct("user").length;
db.B.distinct("user").length;
为了在 A
和 B
的联合中获取不同用户的数量,我将首先检索每个集合的不同数组,然后对数组进行并集并找到长度。如果您使用 JavaScript,我建议您使用 Underscore.js' union()
method to do it. Its usage is explained here。请注意,您可以通过 运行 在 shell 中执行以下命令将 Underscore.js(或任何 JavaScript 文件)加载到 mongo
shell :
load("path/to/underscore.js");
然后您可以轻松运行以下内容:
var a = db.A.distinct("user");
var b = db.B.distinct("user");
_.union(a, b).length;
否则,您可以实现自己的 JavaScript 功能,如 here 所述,或使用您的应用程序的语言实现。
我必须 mongoDB 集合 A 和 B。它们都有字段 'user'。 我想知道 A、B 和 (A + B) 中不同用户的数量。 伪代码如下所示:
A.user.distinct().count()
B.user.distinct().count()
(A.user union B.user)..distinct().count()
有人可以给点建议吗?
你不能使用 count()
with distinct
to get the number of distinct users in your collection because It is not an array method and distinct
returns an array. You need to use the Array.length
属性
要获取 A 或 B 中不同用户的数量,请使用以下命令
db.A.distinct('user').length
db.B.distinct('user').length
要获取 A 联合 B 中不同用户的数量,请使用 Array.prototype.concat()
and Array.prototype.filter()
var users = db.A.distinct('user');
users = users.concat(db.B.distinct('user'));
var num = users.filter(function(u, pos) {return users.indexOf(u) == pos; });
num.length;
要获取每个集合中不同用户的数量,您可以 运行 mongo
shell 中的以下内容:
db.A.distinct("user").length;
db.B.distinct("user").length;
为了在 A
和 B
的联合中获取不同用户的数量,我将首先检索每个集合的不同数组,然后对数组进行并集并找到长度。如果您使用 JavaScript,我建议您使用 Underscore.js' union()
method to do it. Its usage is explained here。请注意,您可以通过 运行 在 shell 中执行以下命令将 Underscore.js(或任何 JavaScript 文件)加载到 mongo
shell :
load("path/to/underscore.js");
然后您可以轻松运行以下内容:
var a = db.A.distinct("user");
var b = db.B.distinct("user");
_.union(a, b).length;
否则,您可以实现自己的 JavaScript 功能,如 here 所述,或使用您的应用程序的语言实现。