gol*_*cks 3 mongoose mongodb node.js mongoose-populate mongoose-schema
根据文档,我有以下架构:
const toolRecordSchema = new mongoose.Schema({
userId: { type: mongoose.Schema.Types.ObjectId },
});
toolRecordSchema.virtual("user", {
ref: "User",
localField: "userId",
foreignField: "_id",
justOne: true,
})
Run Code Online (Sandbox Code Playgroud)
当我填充虚拟时,什么也没有发生:
db.ToolRecord.find().populate("user")
Run Code Online (Sandbox Code Playgroud)
但是,如果我将“ref”添加到userId模式中,然后执行.populate("userId"),它会按预期工作,这意味着问题不在于模型之间的关系,而在于虚拟群体。
有什么想法我做错了什么吗?
如果我添加mongoose.set("debug", true),我可以看到将.populate("user")查询产品添加到猫鼬调试日志中的输出:
users.find({}, { skip: undefined, limit: undefined, perDocumentLimit: undefined, projection: {}})
Run Code Online (Sandbox Code Playgroud)
并添加.populate("userId")(有效的)产品此日志:
users.find({ _id: { '$in': [ new ObjectId("631a1fe960d1f82c7fa51a06") ], [Symbol(mongoose#trustedSymbol)]: true }}, { skip: undefined, limit: undefined, perDocumentLimit: undefined, projection: {}})
Run Code Online (Sandbox Code Playgroud)
这样我们就可以看到问题出在哪里。问题是为什么虚拟人口不起作用?
我正在运行猫鼬6
您需要在和选项virtuals: true上添加选项。toJSONtoObject()
const toolRecordSchema = new mongoose.Schema(
{
userId: { type: mongoose.Schema.Types.ObjectId },
},
{
toJSON: { virtuals: true },
toObject: { virtuals: true },
},
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |