mongodb - Mongoose - 使用 findOneAndUpdate 和数组过滤器仅返回更新的项目
问题描述
我有一个这样的架构:
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 一次性完成此操作,还是必须在获取后过滤结果?
解决方案
要仅显示必填字段,projection
可以使用。由于您试图仅获取数组中的选定字段,filter
因此这是目前 MongoDB 中唯一可用的选项。
推荐阅读
- python - 是否可以使用模板中的参数调用 python 函数?[姜戈]
- python - 如何使用 XPath 提取与给定模式不匹配的项目?
- linux - 删除具有低质量碱基调用的读取
- awk - 根据 csv 中的列值获取行
- javascript - 无论如何要在鼠标仍在移动区域时停止“onmousemove”功能?
- python - 当值是python中的列表时如何将值添加到字典中
- pandas - 熊猫数据框在循环中添加值
- java - 'java.lang.NullPointerException:void android.support.v7.app.ActionBar.setElevation(float)' 如何在空对象引用上'
- reactjs - 如何在 React Native 中使用断点进行调试
- python - 将行放入多个变量中时如何找到文件的结尾(即不使用 for line in f)