我有这样的架构:
doc:
{
//Some fields
visits:
[
{
userID: Int32
time: Int64
}
]
}
我想首先检查是否有特定的userID
存在,如果不存在,则推送一个包含该文件的文档userID
和系统time
,否则只需更新time
价值。我都不知道$push
nor $addToSet
无法做到这一点。还使用$
with upsert:true
没用,因为官方文档建议 DB 将使用$
尝试更新插入时作为字段名称而不是运算符。
请指导我这件事。谢谢
您可以使用$addToSet
将一个项目添加到数组中并$set
更新此数组中的现有项目。
如果以下内容将添加一个新项目到数组中userID
在数组中找不到:
db.doc.update({
visits: {
"$not": {
"$elemMatch": {
"userID": 4
}
}
}
}, {
$addToSet: {
visits: {
"userID": 4,
"time": 1482607614
}
}
}, { multi: true });
如果子文档数组项与以下内容匹配,则以下内容将更新userId
:
db.doc.update({ "visits.userID": 2 }, {
$set: {
"visits.$.time": 1482607614
}
}, { multi: true });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)