Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 当populate涉及mongoose时,如何返回文档内容数组_Node.js_Mongodb_Mongoose_Mongoose Populate - Fatal编程技术网

Node.js 当populate涉及mongoose时,如何返回文档内容数组

Node.js 当populate涉及mongoose时,如何返回文档内容数组,node.js,mongodb,mongoose,mongoose-populate,Node.js,Mongodb,Mongoose,Mongoose Populate,假设我有这样的书籍和页面的mongoose模型: mongoose.model("Book", new Schema({ title: String }); 还有这个 mongoose.model("Page", new Schema({ pageNumber: Number, _bookId: {type: ObjectId, ref: "Book"} }); 每一页都记录着它属于哪本书。现在我想有一个页面号为500的书籍数组 我可以做到以下几点: Page.fin

假设我有这样的书籍和页面的mongoose模型:

mongoose.model("Book", new Schema({
    title: String
});
还有这个

mongoose.model("Page", new Schema({
    pageNumber: Number,
    _bookId: {type: ObjectId, ref: "Book"}
});
每一页都记录着它属于哪本书。现在我想有一个页面号为500的书籍数组

我可以做到以下几点:

Page.find({pageNumber: 500})
    .populate("_bookId")
    .then(function (pages) {
        var books = [];
        pages.forEach(function (page) {
            books.push(page._bookId); // page._bookId now contains a Book document
        });
        return q(books);
    }).then(function (books) {
        // Do something with the books
    });
然而,我在页面上循环的部分似乎很麻烦,这种提取可能由mongo完成。我的问题是这将如何运作

使用populate是最好的方式吗?
我希望保持模式不变。

我认为您的模式设计是这里的问题。为什么页面是一个单独的模式?您应该使用Mongo的嵌入功能在
书籍
中创建
页面
数组:

mongoose.model("Book", new Schema({
    title: String,
    pages: [...]
});
然后你可以搜索有页码的书

此外,如果您的页面只不过是一个页码和一本相关联的书,您可以将页面设置为一个表示总页数的数字


编辑:如果这样的模式只是对用例的简化,而你真的不能进行嵌入,那么你就不走运了。您寻找的抽象称为连接,Mongo不支持,因为它不是Mongo想要的。如果这真的是您的主要用例,您应该考虑使用关系数据库(或更改模式)。

谢谢您的回答。上面只是一个例子,实际上我使用的是更复杂的模式。我之所以不使用嵌入式模式是有原因的,但在这里,我正在寻找一种更好的方法来处理这种模式。如果不能以简洁的方式完成上述操作是模式设计的固有限制,那没关系,我只是想知道这是不是真的。@Florian如果是这样的话,你就不走运了。您寻找的抽象称为连接,Mongo不支持,因为它不是Mongo想要的。如果这真的是您的主要用例,那么您应该考虑使用关系数据库(或更改您的模式)。