如果数组中最后一个元素中的字段不等于值,请更新文档



我想知道如何通过 mongodb 文档中数组中的最后一个元素匹配文档。 假设我想用新数据更新特定文档,如果数组最后一个元素中的字段不等于某个特定值。 我知道我可以这样做来检查数组中的字段是否已经不包含该值:

myTable.update({ Thing: thisThing, 
'myArray.Element': {$ne: parseInt(thisValue)} }, ...)

但是应该如何检查myArray中的最后一个Element(myArray.Element)不等于thisValue? 请注意,我想用find而不是aggregate来做到这一点。

此致敬意

假设我们有集合名称,如下所示:

/* 1 */
{
"_id" : ObjectId("58de74f8c1bb7f4256adf32c"),
"user" : "John",
"list_friends" : [ 
"Alice", 
"Bob"
]
}
/* 2 */
{
"_id" : ObjectId("58de75d3c1bb7f4256adf32d"),
"user" : "Pop",
"list_friends" : [ 
"Eve", 
"Oscar"
]
}

现在,假设我们要将最后一个朋友姓名与"奥斯卡"不同的所有用户(在本例中为约翰)的"用户"字段更改为"已更新"。此查询:

db.getCollection('names').update({$where: "this.list_friends[this.list_friends.length - 1] !== 'Oscar'"}, {"$set": {"user": "Updated"}})

修改集合,最终结果为:

/* 1 */
{
"_id" : ObjectId("58de74f8c1bb7f4256adf32c"),
"user" : "Updated",
"list_friends" : [ 
"Alice", 
"Bob"
]
}
/* 2 */
{
"_id" : ObjectId("58de75d3c1bb7f4256adf32d"),
"user" : "Pop",
"list_friends" : [ 
"Eve", 
"Oscar"
]
}

我使用 Mongo 3.2 测试了该解决方案,我不确定它是否适用于旧版本。

最新更新