我是Mongo的新手,需要帮助才能形成查询以从mongodb集合中检索以下信息
假设我有一个包含用户与群组关联的集合。可以将用户分配到某些组。在下面的示例中,我想找出属于组(1 OR 2)和组3的用户,它们将返回user1以获取以下数据。虽然user2和user3是group1和group2的一部分,但不会返回,因为它们不属于第3组
{
_id : NumberLong(1),
user : "user1",
group : NumberLong(1),
}
{
_id : NumberLong(2),
user : "user1",
group : NumberLong(2),
}
{
_id : NumberLong(3),
user : "user1",
group : NumberLong(3),
}
{
_id : NumberLong(1),
user : "user2",
group : NumberLong(1),
}
{
_id : NumberLong(1),
user : "user3",
group : NumberLong(2),
}
答案 0 :(得分:1)
关于你的问题的第一件事是5个文档不能插入到一个集合中,因为3个文档具有相同的_id
字段值,并且这个_id
字段是mongodb中的主键,因此不能重复单个集合。因此,通过在集合中插入以下数据,
{ "_id" : NumberLong(1), "user" : "user1", "group" : NumberLong(1) }
{ "_id" : NumberLong(2), "user" : "user1", "group" : NumberLong(2) }
{ "_id" : NumberLong(3), "user" : "user1", "group" : NumberLong(3) }
{ "_id" : NumberLong(4), "user" : "user2", "group" : NumberLong(1) }
{ "_id" : NumberLong(5), "user" : "user3", "group" : NumberLong(2) }
您可以使用mongodb聚合框架查找属于第1组或第2组以及第3组的所有用户。对此的查询将是
db.user.aggregate({
$group: {
_id: "$user",
grouping: { $addToSet: "$group"} } },
{ $match: {
$and: [
{ $or: [{ grouping: { $in: [1,2]}}]},
{ grouping: 3}
]}});
答案 1 :(得分:0)
这很简单:
db.colection.distinct('user', {$and : [{$or : [{group : 1}, {group : 2}]}, {group : 3}]});
您可以查看有关logical operators的mongodb文档部分。还有distinct。