Node.js 是否可以获取ID为'的猫鼬种群的所有数据;s
我试图在API端点中创建一个查询,用于获取所有文档和子文档。目前,我只幸运地获取了每个子文档的ID,而没有获取每个文档中的所有信息。是否可以使用mongoose(以及父文档中的数据)根据每个ID从每个子文档中提取数据 我按照文档进行了深入填充:,但运气不太好 这是我当前的代码,它“有效”,但只响应每个子文档的ID(以及用户数据,这很好)Node.js 是否可以获取ID为'的猫鼬种群的所有数据;s,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我试图在API端点中创建一个查询,用于获取所有文档和子文档。目前,我只幸运地获取了每个子文档的ID,而没有获取每个文档中的所有信息。是否可以使用mongoose(以及父文档中的数据)根据每个ID从每个子文档中提取数据 我按照文档进行了深入填充:,但运气不太好 这是我当前的代码,它“有效”,但只响应每个子文档的ID(以及用户数据,这很好) 要从子文档中提取所有信息而不是仅提取ID,我缺少什么?将字段名称传递给填充,而不是模型名称: const allUsers = await User.find(
要从子文档中提取所有信息而不是仅提取ID,我缺少什么?将字段名称传递给
填充
,而不是模型名称:
const allUsers = await User.find()
.populate("posts")
.exec();
在其他填充中使用填充
.populate({
path: 'document',
populate: { path: 'sub document'}
})
正如JohnnyHK所说,您需要使用字段的名称来填充 如果您有空的帖子数组,请检查您的用户集合,如果您有带有帖子ID的帖子数组 以下是我可以让它工作的步骤: 1-)在posts集合中插入2篇类似的帖子
{
"_id" : ObjectId("5dc6cd65067a61191839ff38"),
"name" : "name 3",
"description" : "description 3",
"date" : ISODate("2019-11-09T17:29:57.249+03:00")
}
{
"_id" : ObjectId("5dc6cd5d067a61191839ff37"),
"name" : "name 2",
"description" : "description 2",
"date" : ISODate("2019-11-09T17:29:49.070+03:00")
}
2-)插入了具有这两个帖子id的用户
{
"_id" : ObjectId("5dc6cf5b67da8a40cc519866"),
"posts" : [
ObjectId("5dc6cd5d067a61191839ff37"),
ObjectId("5dc6cd65067a61191839ff38")
],
"name" : "user 1",
"date" : ISODate("2019-11-09T17:38:19.807+03:00")
}
3-)并使用以下路径在用户中获取帖子
router.get("/allUsers", async (req, res) => {
const allUsers = await User.find().populate("posts");
res.send(allUsers);
});
结果如下:
[
{
"posts": [
{
"_id": "5dc6cd5d067a61191839ff37",
"name": "name 2",
"description": "description 2",
"date": "2019-11-09T14:29:49.070Z",
"__v": 0
},
{
"_id": "5dc6cd65067a61191839ff38",
"name": "name 3",
"description": "description 3",
"date": "2019-11-09T14:29:57.249Z",
"__v": 0
}
],
"_id": "5dc6cf5b67da8a40cc519866",
"name": "user 1",
"date": "2019-11-09T14:38:19.807Z",
"__v": 0
}
]
顺便说一句您的用户和后期建模并不理想。每次用户发布时,必须更新用户文档
我将使用以下模式(父引用)
用户模型(我删除了posts字段,并添加了虚拟功能)
发布模型(我添加了用户ID)
通过这种方式,当用户发布时,用户文档不会受到影响。您可以使用相同的/allUsers路由来获取包含帖子的用户。这只是返回一个空的帖子数组,为什么?打开mongoose调试来查看它在做什么:
mongoose.set('debug',true)代码>猜测我在其他地方遇到了另一个错误,因为这仍然不起作用。我最终只是使用了一个帖子数组,而不是仅仅引用Id,但我猜你的答案是正确的。
[
{
"posts": [
{
"_id": "5dc6cd5d067a61191839ff37",
"name": "name 2",
"description": "description 2",
"date": "2019-11-09T14:29:49.070Z",
"__v": 0
},
{
"_id": "5dc6cd65067a61191839ff38",
"name": "name 3",
"description": "description 3",
"date": "2019-11-09T14:29:57.249Z",
"__v": 0
}
],
"_id": "5dc6cf5b67da8a40cc519866",
"name": "user 1",
"date": "2019-11-09T14:38:19.807Z",
"__v": 0
}
]
const mongoose = require("mongoose");
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
date: { type: Date, default: Date.now }
}, {
toJSON: { virtuals: true },
toObject: { virtuals: true }
});
userSchema.virtual("posts", {
ref: "Post",
foreignField: "userId",
localField: "_id"
})
const User = mongoose.model("User", userSchema);
module.exports = User;
const mongoose = require("mongoose");
const postSchema = new mongoose.Schema({
name: { type: String, required: true },
description: { type: String, required: true },
date: { type: Date, default: Date.now },
userId: { type: mongoose.Schema.ObjectId, ref: "User" }
});
const Post = mongoose.model("Post", postSchema);
module.exports = Post;