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

标签 mongodb updates

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

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

但是应该如何检查 myArray 中的最后一个 Element (myArray.Element) 不等于 thisValue? 请注意,我想使用 findnot aggregate 来执行此操作。

最好的问候

最佳答案

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

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

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

现在,假设我们要将所有最后 friend 姓名不同于“Oscar”(在本例中为 John)的用户的“用户”字段更改为“已更新”。这个查询:

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 测试了该解决方案,我不确定它是否适用于旧版本。

关于mongodb - 如果数组中最后一个元素的字段不等于值,则更新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43136720/

相关文章:

来自 Play 商店的 Android 应用程序更新

PHP 应用程序更新

ruby-on-rails - bool 值不起作用的Mongoid

mongodb - 如何在 MongoDB 上的 Grails 集成测试中回滚事务

vue.js - VueJS 如何重新渲染一个组件

android - A/B 软件更新系统镜像大小

java - 如何每10秒更新一次GPS位置?

mongodb - Morphia 通过引用 ObjectID 查询

mongodb - 使用 Mongodb 的 .Net Core Web Api 身份验证

mongodb - Nutch无法使用Mongodb在Elasticsearch上正确索引