gpt4 book ai didi

javascript - 为什么 mongoose populate 在填充数组时不起作用?

转载 作者:行者123 更新时间:2023-12-02 22:54:59 26 4
gpt4 key购买 nike

我有 2 个架构:

const mongoose = require('mongoose');

const PinSchema = new mongoose.Schema({
title: String,
content: String,
image: String,
latitude: Number,
longitude: Number,
author: {
type: mongoose.Schema.ObjectId,
ref: "User"
},
comments: [
{
text: String,
createdAt: {
type: Date,
default: Date.now,
author: {
type: mongoose.Schema.ObjectId,
ref: "User"
}
}
}
]
}, { timestamps: true });

module.exports = mongoose.model("Pin", PinSchema);

const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
name: String,
email: String,
picture: String
});

module.exports = mongoose.model("User", UserSchema);

如您所见,Pin 中的 author 字段与用户架构中的 _id 相同。

然后,我尝试填充 Pin 架构中的注释 author 字段,如下所示:

const pinUpdated = await Pin.findOneAndUpdate(
{ _id: pinId },
{ $push: { comments: "some comment" } },
{ new: true }
).populate("author")
.populate("comments.author");

但是结果对象的 author 字段设置为 null,因此总体不起作用。

我并不反对使用 $lookup 使用 native mongo 语法执行此操作,但就我而言,它不仅仅是查找数组,而是查找对象数组的字段:

db.pins.aggregate([
{
$lookup:
{
from: "users",
localField: "comments._id", // this won't work
foreignField: "_id",
as: "authorOutput"
}
}
])

我在populate()中缺少什么?

最佳答案

看起来 comments 数组中的 author 字段嵌套在 createdAt 对象内,这可能是无意的。将 PinSchema 更改为以下内容(在作者之前关闭大括号)应该可以修复它:

const PinSchema = new mongoose.Schema({
...
comments: [
{
text: String,
createdAt: {
type: Date,
default: Date.now,
},
author: {
type: mongoose.Schema.ObjectId,
ref: "User"
}
}
]
}, { timestamps: true });

关于javascript - 为什么 mongoose populate 在填充数组时不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58029873/

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