我有一个具有以下数据结构的MongoDB
teamName: (String)
data: (Array)
---date: (Timestamp)
---userResults: (Object)
------userHash: (StringHash)
------score: (String)
------comment: (String)
Here is a short example on PasteBin
鉴于具体的teamName
和date
(在团队数据数组中),我想在{userHash: '', score: '', comment: ''}
数组中添加一个新行(userResults
)
如何在查询父节点和父节点父节点后更新给定文档中的数组?
我已经尝试findOneAndUpdate
了。它直接从根目录插入了一个完整的新文档。
TeamRecordSchema.findOneAndUpdate(
{teamName: teamName, data: {date: today}},
{$set:{teamName: teamName, data: {date: today, userResults: [userResponse]}}},
{new: true, upsert: true},
function(err, savedDoc){
// Do stuff with err and savedDoc
});
我已经尝试了save
,而且它只是在我的数据库中的根级别创建了一个完整的新文档
const _userResponse = new TeamRecordSchema(teamUserResponse);
_userResponse.save((err, savedDoc) => {
// Do stuff with err and savedDoc accordingly
});
我还根据文档尝试了多种变体,但是我得到了相同的结果或错误。
非常感谢任何指针建议 - 提前感谢:)
答案 0 :(得分:1)
您必须使用$positional
运算符。
您包含date
中的字段(data
)以找到元素的索引,并将更新部分中查询部分中找到的索引替换为占位符($
)推送userResults
中的元素。
TeamRecordSchema.findOneAndUpdate(
{teamName: teamName, 'data.date': today}},
{$push:{'data.$.userResults': {userHash: '', score: '', comment: ''}}},
{new: true, upsert: true},
function(err, savedDoc){ }
);