【发布时间】:2015-07-11 22:59:24
【问题描述】:
我需要将一个对象添加到 MongoDB 集合文档中的数组中,插入后我需要确保所有数组的元素都按其属性之一排序。
因为我需要数组中的对象是唯一的,所以我使用 $addToSet 而不是 $push。这是我正在尝试的一个示例:
db.perros.update(
{name: "Risas"},
{
$addToSet: {propiedades: {name: "cola", cantidad: 1}},
$push: { propiedades: { $each: [ ], $sort: {cantidad: -1} }}
});
但是这将失败并出现以下 Mongo 错误:
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 16837,
"errmsg" : "Cannot update 'propiedades' and 'propiedades' at the same time"
}
})
当您考虑 sets 时,这一点很明显,但是 $push 操作甚至不关心数组内部的内容......如何在不使用 $push 的情况下实现这一点?
【问题讨论】:
-
它目前无法与 $push 一起使用,对吧?不应该只是我 $addToSet :{}, $sort: {propiedades: {cantidad: -1}} 或类似的东西吗?
-
我不懂你
-
@ChadF 只有
$each修饰符对$addToSet有效。不能使用$sort修饰符,因为 MongoDB 不考虑对“集合”进行排序。这就是为什么这里的 OP 尝试了这种方法并因此发现了无法一次将多个更新操作应用于同一属性路径的错误。当然,还有其他方法可以做到这一点。