[英]How to save a large array to MongoDB using mongoose in Node.js
[英]How to get data from MongoDB to simple array using Node.JS and Mongoose?
假設這是我的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 }
];
您可以使用聚合框架路由,該路由具有通過$unwind
運算符使陣列變平的功能。 這將為應用展開的列表數據字段的每個元素生成一條新記錄。 它基本上使數據變平。
拼合數據后,您將需要$lookup
運算符在products
字段中將“ join”到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);
})
免責聲明 :上面是未經測試的代碼,它僅通過以下幾個假設為指導:您正在使用支持$lookup
運算符的最新MongoDB和mongoose版本在測試環境中運行代碼,並且可以執行相同的聚合在mongo shell中查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.