我已經瀏覽了貓鼬API,以及許多關於SO和谷歌組的問題,但仍然無法弄清楚更新嵌入式文檔。如何在貓鼬中更新嵌入式文件?
我想用args的內容更新這個特定的userListings對象。
for (var i = 0; i < req.user.userListings.length; i++) {
if (req.user.userListings[i].listingId == req.params.listingId) {
User.update({
_id: req.user._id,
'userListings._id': req.user.userListings[i]._id
}, {
'userListings.isRead': args.isRead,
'userListings.isFavorite': args.isFavorite,
'userListings.isArchived': args.isArchived
}, function(err, user) {
res.send(user);
});
}
}
下面是模式:
var userListingSchema = new mongoose.Schema({
listingId: ObjectId,
isRead: {
type: Boolean,
default: true
},
isFavorite: {
type: Boolean,
default: false
},
isArchived: {
type: Boolean,
default: false
}
});
var userSchema = new mongoose.Schema({
userListings: [userListingSchema]
});
這個發現也不起作用,這可能是第一個問題:
User.find({
'_id': req.user._id,
'userListings._id': req.user.userListings[i]._id
}, function(err, user) {
console.log(err ? err : user);
});
返回:
{ stack: [Getter/Setter],
arguments: [ 'path', undefined ],
type: 'non_object_property_call',
message: [Getter/Setter] }
這應該是th的等價物是蒙戈客戶端調用:
db.users.find({'userListings._id': ObjectId("4e44850101fde3a3f3000002"), _id: ObjectId("4e4483912bb87f8ef2000212")})
運行:
mongoose v1.8.1
mongoose-auth v0.0.11
node v0.4.10
我得到「類型錯誤的方式:對象[對象對象],[目標對象],[目標對象],[目標對象]有沒有方法「身份證'「 – FrederickCook
這是一個貓鼬身份驗證問題?這就是req.user分配的地方。 – FrederickCook
貓鼬記錄說:「DocumentArrays有一個特殊的方法ID,它通過_id屬性(每個嵌入式文檔得到一個)來過濾嵌入式文檔」。但我自己沒有嘗試過。 – pkyeck