mongodb - Mongodb 使用 $in 在另一个查询中使用查询结果

标签 mongodb mongodb-query aggregation-framework non-relational-database document-based-database

我在 mongo db 中有以下模型:

用户集合

{
_id:12345,
name:"Joe",
age:15,
}

地址集合

{
_id:7663,
userId:12345,
Street:"xyz",
number:"1235",
city:"New York",
state:"NY"
}

现在我想获取20岁以上用户的所有地址。我的想法是查询20岁以上用户的所有id,并根据此查询的结果使用$in运算符来查找地址。

我的问题是,有没有办法将其变成一个查询?有没有更好的方法来查询这个? (注:这只是一个例子,由于我的问题,我无法将地址嵌入到用户中)

最佳答案

在 Mongo shell 中,您可以在另一个查询中使用一个查询的结果。例如:

use database  // the name of your database
db.coll1.find({_id:{$nin:db.coll2.distinct("coll1_id")}})

这里集合 coll1 包含一个 _id 字段。然后,您可以检查不在集合 coll2 的 coll1_id 字段列表中的任何 id。因此,如果 coll1 中的记录没有通过 coll2 中的 coll1_id 字段进行引用,那么这是清理两个表的方法。

另一种方法做同样的事情:

use database  // the name of your database
temp = db.coll2.distinct("coll1_id");
db.coll1.find({_id:{$nin:temp}})

第一个示例用一个命令执行此操作,第二个示例用两个命令执行此操作,但概念是相同的。在另一个查询中使用一个查询的结果。有很多不同的方法可以做到这一点。此外,如果您不仅仅使用distinct(),则 .toArray() 方法对于创建数组也很有用。

关于mongodb - Mongodb 使用 $in 在另一个查询中使用查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23637743/

相关文章:

java - 为 Spring Data 运行的每个查询设置注释

java - 在 Mongodb 中使用 View 的性能优势/劣势

mongodb - 仅检索 MongoDB 集合中对象数组中的查询元素

mongodb - 是否可以将展开的数组的一个字段连接到展开的数组上?

MongoDB 查询连接两个集合

mongodb - 如何检查子字段是否存在并且在mongodb聚合中不为空?

mongodb - 使用 MongoDB 中的聚合框架按特定嵌套字段值对文档进行计数

php - CakePHP 2 找不到插件

mongodb - GridFS 使用文件名作为索引

java - 如何在Java Mongodb投影操作中给出$ObjectId