我有一个这样的模型:
const Screen = new Schema(
{
userId: [
{
type: ObjectId,
default: null
}
],
contents: [
{
content: {
type: ObjectId,
ref: "Content",
default: null
}
}
],
},
{ strict: false }
);
我想删除内容子文档中的内容,我这样写:
screenModel
.find({ screenCode: screenCode })
.lean()
.exec()
.then(screen =>
{
const newScreen = screen;
newScreen.contents.id(_id).remove();
screenModel.replaceOne(screen, newScreen);
return newScreen;
})
但它会向我返回该错误:
“错误:无法读取未定义的属性'id'
在APIError.ExtendableError(D:\ Projelerim \ React \ adonis-api-v1 \ workspace \ dist \ api \ helpers \ APIError.js:35:11)
在新的APIError上(D:\ Projelerim \ React \ adonis-api-v1 \ workspace \ dist \ api \ helpers \ APIError.js:63:101)
在D:\ Projelerim \ React \ adonis-api-v1 \ workspace \ dist \ config \ express.js:129:20
在Layer.handle_error(D:\ Projelerim \ React \ adonis-api-v1 \ workspace \
ode_modules \ express \ lib \ router \ layer.js:71:5)
在trim_prefix(D:\ Projelerim \ React \ adonis-api-v1 \ workspace \
ode_modules \ express \ lib \ router \ index.js:315:13)
在D:\ Projelerim \ React \ adonis-api-v1 \ workspace \
ode_modules \ express \ lib \ router \ index.js:284:7
在Function.process_params(D:\ Projelerim \ React \ adonis-api-v1 \ workspace \
ode_modules \ express \ lib \ router \ index.js:335:12)
在下一个(D:\ Projelerim \ React \ adonis-api-v1 \ workspace \
ode_modules \ express \ lib \ router \ index.js:275:10)
在D:\ Projelerim \ React \ adonis-api-v1 \ workspace \
ode_modules \ express \ lib \ router \ index.js:635:15
在Instant.next(D:\ Projelerim \ React \ adonis-api-v1 \ workspace \
ode_modules \ express \ lib \ router \ index.js:260:14)
立即发布。_onImmediate(D:\ Projelerim \ React \ adonis-api-v1 \ workspace \
ode_modules \ express \ lib \ router \ index.js:635:15)
在runCallback(timers.js:706:11)
在tryOnImmediate(timers.js:676:5)
在processImmediate(timers.js:658:5)
在process.topLevelDomainCallback(domain.js:121:23)
模式如下:
"contents":[
{
"content":{
"$oid":"5c38a45c7bb5f232d4c3233c"
},
"_id":{
"$oid":"5c38ad1a994d6b436826778d"
}
},
{
"content":{
"$oid":"5c38a45c7bb5f232d4c3233c"
},
"_id":{
"$oid":"5c38ad3d994d6b436826778e"
}
}
]
此代码有什么问题?我已经尝试将id()更改为pull(),它也给出了错误,请帮我:(
答案 0 :(得分:0)
我希望您知道精益的原理.lean()
。
从启用了lean选项的查询返回的文档是纯JavaScript对象,而不是MongooseDocuments。他们没有应用保存方法,没有使用吸气剂/设置剂或其他猫鼬魔法。
调试错误
无法读取未定义的属性“ id”
很明显,它在此时newScreen.contents.id
崩溃
请添加console.log()
,以验证您在寻找screen
中收到的then
。
恕我直言,screen
是Array
,其中包含您的屏幕,因此,您必须对其进行迭代。
像这样:
for (const sc of screen) { ...your logic with removing }