我有一个这样的架构:
documents [
_id
items [
name
type
subitems [
_id
name
]
]
]
我想使用 、 、 和 的组合更新document.id一个item.name子item.type项subitem.id。我有一个使用 Mongoose 的有效 findOneAndUpdate 查询。
db.models.Document.findOneAndUpdate(
{ _id: mongoose.Types.ObjectId(document.id), 'items.name': item.name, 'items.type': item.type },
{ $set: { 'items.$.subitems.$[subitem].name': 'New Name' } },
{
fields: { _id: 0, 'items.$.subitems': 1 },
arrayFilters: [
{ 'subitems._id': mongoose.Types.ObjectId(subitem.id) }
]
},
(err, section) => {
console.log(section);
}
);
反过来,此查询返回:
{ items: [ subitems: [{ _id: 'IDHERE', name: 'NAME' }, { _id: 'IDHERE2', name: 'NAME2' }], name: 'Name', type: 'Type' } ] }
但是,我只想要查询使用数组过滤器更新的确切子项。
{ _id: 'IDHERE', name: 'NAME' }
我可以使用 Mongo 一次性完成此操作,还是必须在获取后过滤结果?