gpt4 book ai didi

javascript - 如何使用 Node.JS 和 Mongoose 将数据从 MongoDB 获取到简单数组?

转载 作者:行者123 更新时间:2023-12-03 06:38:40 24 4
gpt4 key购买 nike

假设这是我的 MongoDB 架构:

    var shopSchema = new mongoose.Schema({
nameShop: String,
products: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Product'
}]
});

var productSchema = new mongoose.Schema({
nameProduct: String,
fruits: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Fruit'
}
]
});

var fruitSchema = new mongoose.Schema({
nameFruit: String,
price: Number
});

module.exports = {
Shop: mongoose.model('Shop', shopSchema),
Product: mongoose.model('Product', productSchema),
Fruit: mongoose.model('Fruit', fruitSchema)
}

我知道我可以通过这种方式获取数据,但该代码的结果是一个“丑陋”的数组

var Schema = require('../model/schema');
Schema.Shop.find({}).populate({
path: 'products',
model: 'Product',
populate: {
path: 'fruits',
model: 'Fruit'
}
}).exec(callback);

是否可以从该模式中获取数据,从而获得漂亮的数组?例如:

var MyArray = [
{ nameShop: "Tesco", nameProduct: "New", nameFruit: "Apple", price: 10 },
{ nameShop: "Tesco", nameProduct: "New", nameFruit: "Pinapple", price: 4 },
{ nameShop: "Eko", nameProduct: "Old", nameFruit: "Kiwi", price: 8 },
{ nameShop: "Makro", nameProduct: "Fresh", nameFruit: "Pear", price: 7 },
{ nameShop: "Carefour", nameProduct: "New", nameFruit: "Orange", price: 6 }
];

enter image description here

最佳答案

您可以采用聚合框架路线,它能够通过 $unwind 展平阵列。 运算符。这将为应用展开的列表数据字段的每个元素生成一条新记录。它基本上使数据扁平化。

展平数据后,您需要 $lookup 运算符将 products 字段“加入”到 products 集合。对嵌套水果模式重复该过程。

让我们看一个示例(未经测试)来更好地理解这一点

var Schema = require('../model/schema');
Schema.Shop.aggregate([
{ "$unwind": "$products" },
{
"$lookup": {
"from": "products",
"localField": "products",
"foreignField": "_id",
"as": "product"
}
},
{ "$unwind": "$product" },
{ "$unwind": "$product.fruits" },
{
"$lookup": {
"from": "fruits",
"localField": "product.fruits",
"foreignField": "_id",
"as": "fruits"
}
},
{
"$project": {
"nameShop": 1,
"nameProduct": "$product.nameProduct",
"nameFruit": "$fruits.nameFruit",
"price": "$fruits.price",
}
}
]).exec(function (err, result){
if (err) throw err;
console.log(result);
})

免责声明:以上是未经测试的代码,仅作为指导,假设您在具有支持 < 的最新 MongoDB 和 mongoose 版本的测试环境中运行代码。强>$lookup 运算符 AND 表示您可以在 mongo shell 中执行相同的聚合查询。

关于javascript - 如何使用 Node.JS 和 Mongoose 将数据从 MongoDB 获取到简单数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38072792/

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