这个mongo插入这么长并且需要5次调用的原因是here (Managing database with content-addressable hash),我希望这使得这更有意义/不那么冗长。是否有一个我缺少的功能允许我根据数组中的值进行有条件的upsert。
function insert (user, type, data, name) {
var hash = util.getHash(data)
var collection = db.collection('content')
return collection.find({
'user': user,
'type': type,
'hash': hash,
'meta.name': name
}).toArray().then(function (arr) {
if (!arr.length) {
return collection.find({
'user': user,
'type': type,
'hash': hash
}).toArray().then(function (arr) {
if (!arr.length) {
return collection.insert({
'user': user,
'type': type,
'hash': hash,
'date': new Date(),
'data': data,
'meta': [
{
'name': name
'date': new Date()
}
],
})
} else {
return collection.update({
'user': user,
'type': type,
'hash': hash,
'meta.name': name
}, {
'$push': {
'meta': {
'name': name
'date': new Date()
}
}
})
}
})
} else {
return collection.update({
'user': user,
'type': type,
'hash': hash,
'meta.name': name
}, {
'$push': {
'meta': {
'date': new Date()
}
}
})
}
})
}
答案 0 :(得分:0)
这是一个电话,唯一的问题是它每次都会更新name
,如果name
,我希望不更新name
存在于meta
数组中。
function insert (user, type, data, name) {
var content = {
'user': user,
'data': data,
'hash': util.getHash(data),
'date': new Date()
}
var collection = db.collection('contents')
return collection.update({
'user': content.user,
'type': content.type
}, {
'$setOnInsert': content,
'$push': {
'meta': {
'name': name,
'date': new Date()
}
}
}, {
'upsert': true
})
}