- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有两个 Mongoose 收藏。让我们考虑一下collection-1
和collection-2
。他们的数据与以下数据类似
collection-1 :
{'name': 'Tom', 'age':20, 'bank-acc':1111},
{'name': 'Dick', 'age':25, 'bank-acc':2222},
{'name': 'Hary', 'age':22, 'bank-acc':3333}
Collection-2
{'bank-acc':1111, 'balance':100},
{'bank-acc':2222, 'balance':200},
{'bank-acc':3333, 'balance':300}
现在我想同时查询这两个集合,以获取集合 1 中年龄大于 20 且余额大于 100 的名称。有些人建议我,因为这是 MongoDB,它是 NO-SQL
因此我应该将这两个表合并为一个,然后尝试查询它,但就我而言,将这两个表与真实模式结合起来对我来说是非常不可行的。我猜想可能可以使用查找或类似关键字的聚合查询,但我在很多地方进行了搜索,在找到这个问题的答案时我不知道要搜索什么。任何人都可以提供一个示例聚合查询来同时搜索两个表吗?
最佳答案
使用$lookup:
$lookup New in version 3.2.
Performs a left outer join to an unsharded collection in the same database to filter in documents from the “joined” collection for processing. To each input document, the $lookup stage adds a new array field whose elements are the matching documents from the “joined” collection. The $lookup stage passes these reshaped documents to the next stage.
尝试这样的事情:
db.getCollection('collection1').aggregate([
{ $lookup:
{
from: "collection2",
localField: "bank-acc",
foreignField: "bank-acc",
as: "collection2_doc"
}
},
{
"$unwind": {
path: "$collection2_doc",
preserveNullAndEmptyArrays: false
}
},
{
$match : {
name: "Tom", //field from collection1
"collection2_doc.ballance": {$gt: 100} //field from collection2
}
}
]);
关于node.js - 如何在另一个集合上使用某些条件搜索一个 Mongoose 集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50600702/
我是一名优秀的程序员,十分优秀!