使用猫鼬将值推入数组时遇到了问题(是的,我已经阅读了很多有关它的主题,并尝试了许多方法来实现)。
所以我有这个模式
const Postit = new Schema({
text: {
type: String,
required: true
},
status: {
type: String,
default: 'TODO'
},
modified: {
type: Date,
default: Date.now
},
user: {
type: ObjectId,
ref: 'User',
required: true
},
collaborators: [String]
})
我正在尝试在查询匹配的collaborators属性中推送一个字符串。
这是我用来更新它的方法
addCollaborator(uid, pid) {
return Postit.updateOne({
_id: pid,
user: uid
},
{ $push: { collaborators: 'pepe' } },
(err, raw) => {
//TO DO
})
}
但是什么也没发生。该查询之所以匹配,是因为如果我将$ set的$ push更改并为status属性添加新值,例如它会更新。
有趣的是,如果我在mongodb客户端中运行它,那么它将起作用。
db.postits.updateOne({
_id: ObjectId("5beb1492cf484233f8e21ac1"),
user: ObjectId("5beb1492cf484233f8e21abf")
},
{ $push: {collaborators: 'pepe' }
})
我做错了什么?
答案 0 :(得分:0)
选择promises
或callbacks
,但不要将它们混合在一起。您可以这样做:
addCollaborator(uid, pid) {
Postit.updateOne({
_id: mongoose.Types.ObjectId(pid),
user: uid
},
{ $push: { collaborators: 'pepe' } },
(err, raw) => {
// TO DO
})
}
或者您这样做:
addCollaborator(uid, pid) {
return Postit.updateOne({
_id: mongoose.Types.ObjectId(pid),
user: uid
},
{ $push: { collaborators: 'pepe' } }).exec()
.then(result => {
// TO DO
})
}
还要确保您的objectId是实际的mongoose.Types.ObjectId
答案 1 :(得分:0)
好的,问题是我使用的是旧模式。
该代码运行完美。今天足够的代码...