鉴于以下文档结构:
{
'_id': ObjectId("559943fcda2485a66285576e"),
'user': '70gw3',
'data': [
{
'date': ISODate("2015-06-29T00:00:00.0Z"),
'clicks': 1,
},
{
'date': ISODate("2015-06-30T00:00:00.0Z"),
'clicks': 5,
},
]
}
Run Code Online (Sandbox Code Playgroud)
如果它不存在[整个文档或特定日期],如何增加和增加的clicks
值,使它等于?2015-06-30
1
不幸的是,不可能在单个查询中实现您的目标。但您可以执行以下操作
var exists = db.yourCollection.find(
{'_id': ObjectId("559943fcda2485a66285576e"), 'data.date': <your date>}
).count()
Run Code Online (Sandbox Code Playgroud)
此查询将返回数组中具有指定日期的文档数_id
和具有指定日期的对象data
。由于该_id
领域是唯一的,您最多只能得到一个结果。如果数组中不存在这样的元素data
,则不会得到任何结果。因此,您有以下情况:
那么这可以成为你的条件:
if (exists) {
db.yourCollection.update({_id: <your id>, 'data.date': <your date>}, {$inc: {'data.$.clicks': 1}})
} else {
if (db.runCommand({findAndModify: 'yourCollection', query: {_id: <your id>, 'data.date': {$ne: <your date>}}, update: {$push: {data: {date: <your date>, clicks: 1}}}}).value) {
db.yourCollection.update({_id: <your id>, 'data.date': <your date>}, {$inc: {'data.$.clicks': 1}})
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3320 次 |
最近记录: |