gpt4 book ai didi

node.js - 如何使用 Mongoose 将多个引用保存到 MongoDB 中的其他文档?

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:04 26 4
gpt4 key购买 nike

我正在尝试找出如何使用 Mongoose 保存对 MongoDB 中其他文档的多个引用。保存对其他文档的一个引用并不是什么大问题,但是当您想要保存对其他文档的多个引用并稍后填充它们时,它很快就会变得复杂。

让我们看看我有什么:

var mongoose = require('mongoose'),
Schema = mongoose.Schema;

var Book = Schema({
title: String,
reviews: [{ type: Schema.Types.ObjectId, ref: 'Review' }]
});

var Review = Schema({
body: String
});

var Book = mongoose.model('Book', bookSchema);
var Review = mongoose.model('Book', reviewSchema);

var reviewItem = new Review({body: "review content"});

Book.find({}).exec(function(err, collection) {
if(collection.length === 0) {

reviewItem.save(function (err) {
if (err) return handleError(err);

var bookItem = new Book({
title: "book title",
reviews: reviewItem._id
});

bookItem.save(function (err) {
if (err) return handleError(err);
})
})

}
})

在此示例中,我将在 bookItem 中引用它来保存 reviewItem,但我想使用以下方式保存 reviewItem 对象的数组: bookItem 中的引用数组。我怎么能这么做呢?

填充 Book 时我期望的结果:

[
{
"_id": "547b1a4685207124a085d0c5",
"title": "The Enterprise And Scrum",
"reviews": [
{
"_id": "547b1a4685207124a085d0c3",
"body": "review 1"
},
{
"_id": "543d99564d01f3de94655ba2",
"body": "review 2"
},
{
"_id": "543d995625755d19ba72863d",
"body": "review 3"
}
]
}
]

最佳答案

你必须使用 book.reviews.push。这是一个工作示例:

var async = require('async');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/test');

var Review = mongoose.model('Review', {
body: String
});

var Book = mongoose.model('Book', new Schema({
title: String,
reviews: [{ type: Schema.Types.ObjectId, ref: 'Review' }]
}));

async.parallel([
function(next) { Book.remove({}, next); },
function(next) { Review.remove({}, next); }],
function() {
async.map(['review 1', 'review 2', 'review 3'], createReview, function(err, reviews) {
var book = new Book({ title: 'something clever' });
for(var i = 0; i < reviews.length; i++) {
book.reviews.push(reviews[i]);
}

book.save(function(err, doc) {
Book.find({})
.populate('reviews')
.exec(function (err, books) {
console.log(err, books);
});
});
});
});

function createReview(body, fn) {
var review = new Review({ body: body });
review.save(fn);
}

关于node.js - 如何使用 Mongoose 将多个引用保存到 MongoDB 中的其他文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27260162/

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