gpt4 book ai didi

node.js - 如何在另一个集合上使用某些条件搜索一个 Mongoose 集合?

转载 作者:太空宇宙 更新时间:2023-11-03 22:45:20 24 4
gpt4 key购买 nike

我有两个 Mongoose 收藏。让我们考虑一下collection-1collection-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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com