如何在 Robo3T 中将结果从一个查询传递到另一个查询
How to pass results from one query to another in Robo3T
我试图将一个 MongoDB 查询的结果传递给另一个查询,但结果在对象中,我需要它作为数组。
示例:
var locId = db.getCollection('locations').find({country:"France"}, {_id:1}).toArray()
如何将结果传递给另一个查询:
db.getCollection('products').find({locId: {$in: locId }})
第一个查询的结果类似于:
array[1] [
obj[0] {_id: LocId123},
obj[1] {_id: LocId456},
obj[1] {_id: LocId789},
]
我可以用这个传递值:
locId = Array.from(locId , value => value._id )
问题是我无法将其封装在外部函数中,因为我无法通过函数参数传递此“_id”。
关于如何自动化它有什么想法吗?
您可以使用aggregate()将所有id组合成一个数组,
var locId = db.getCollection('locations').aggregate([
{ $match: { country: "france" } },
{
$group: {
_id: null,
ids: { $push: "$_id" }
}
},
{
$project: { _id: 0, ids: 1 }
}
])
游乐场:https://mongoplayground.net/p/8_uzjCNMy00
结果:
[{
"ids": [1, 2, 3]
}]
您可以访问:
db.getCollection('products').find({locId: {$in: locId[0]['ids'] }})
如果你想在单个聚合查询中组合这两个查询,那么试试,
$match
country
条件
- $lookup 使用 localField 加入
products
集合 _id
到 foreignField locId
- $unwind解构
products
数组
$group
by _id
null 并推送 products
中的所有产品
$unwind
解构products
数组
$project
显示必填字段
var products = db.getCollection('locations').aggregate([
{
$match: { country: "france" }
},
{
$lookup: {
from: "products",
as: "products",
localField: "_id",
foreignField: "locId"
}
},
{ $unwind: "$products" },
{
$group: {
_id: null,
products: { $push: "$products" }
}
},
{ $unwind: "$products" },
{
$project: {
_id: "$products._id",
locId: "$products.locId"
}
}
])
我试图将一个 MongoDB 查询的结果传递给另一个查询,但结果在对象中,我需要它作为数组。 示例:
var locId = db.getCollection('locations').find({country:"France"}, {_id:1}).toArray()
如何将结果传递给另一个查询:
db.getCollection('products').find({locId: {$in: locId }})
第一个查询的结果类似于:
array[1] [
obj[0] {_id: LocId123},
obj[1] {_id: LocId456},
obj[1] {_id: LocId789},
]
我可以用这个传递值:
locId = Array.from(locId , value => value._id )
问题是我无法将其封装在外部函数中,因为我无法通过函数参数传递此“_id”。 关于如何自动化它有什么想法吗?
您可以使用aggregate()将所有id组合成一个数组,
var locId = db.getCollection('locations').aggregate([
{ $match: { country: "france" } },
{
$group: {
_id: null,
ids: { $push: "$_id" }
}
},
{
$project: { _id: 0, ids: 1 }
}
])
游乐场:https://mongoplayground.net/p/8_uzjCNMy00
结果:
[{
"ids": [1, 2, 3]
}]
您可以访问:
db.getCollection('products').find({locId: {$in: locId[0]['ids'] }})
如果你想在单个聚合查询中组合这两个查询,那么试试,
$match
country
条件- $lookup 使用 localField 加入
products
集合_id
到 foreignFieldlocId
- $unwind解构
products
数组 $group
by_id
null 并推送products
中的所有产品
$unwind
解构products
数组$project
显示必填字段
var products = db.getCollection('locations').aggregate([
{
$match: { country: "france" }
},
{
$lookup: {
from: "products",
as: "products",
localField: "_id",
foreignField: "locId"
}
},
{ $unwind: "$products" },
{
$group: {
_id: null,
products: { $push: "$products" }
}
},
{ $unwind: "$products" },
{
$project: {
_id: "$products._id",
locId: "$products.locId"
}
}
])