我有这样的Collection :

mc.db.collection.insert_many([
    {"key_array": [1], "another_array": ["a"]},
    {"key_array": [2, 3], "another_array": ["b"]},
    {"key_array": [4], "another_array": ["c", "d"]},    
])

我正在使用这种更新:

mc.db.collection.update_one(
    {"key_array": 5},
    {"$addToSet": {"another_array": "f"}},
    upsert=True
)

它与更新配合得很好,但我在try 升级时遇到了问题:

{
    "_id": ObjectId(...)
    "key_array": 5,
    "another_array": ["f"]
}

而我想要这个

{
    "_id": ObjectId(...)
    "key_array": [5],
    "another_array": ["f"]
}

此外,我不能使用{"key_array": [5]}样式的查询,因为它不会匹配长度为>1.

那么,是否有机会在更新时保存这种行为,并在插入时收到正确的文档 struct ?

任何帮助都将不胜感激

推荐答案

这应该会有帮助.

mc.db.collection.update_one(
    {"key_array": 5},
    {
        "$addToSet": {"another_array": "f"},
        "$setOnInsert": {"key_array": [5], ...}
    },
    upsert=True
)

Mongodb相关问答推荐

使用mongosh将大型json文件插入到mongo集合中

带dropTarget的MongoDB renameCollection命令是原子的吗

如何在Mongodb Mongoose Nodejs中提取不等于一组值的字段

如何使用mongodb进行离线开发?

使用特定关键字和邻近度进行查询和过滤

定期自动轮换 MongoDb 集合

如何在 2 个应用程序之间共享mongoose模型?

如何在 mongodb 中设置整数的默认值?

更新 mongoengine 中的嵌入文档列表

使用 ObjectId.GenerateNewId() 还是离开 MongoDB 创建一个?

用 BsonRepresentation(BsonType.ObjectId) vs BsonId vs ObjectId 在 C# 中装饰属性之间的区别

如何使用 -number 后缀对字符串进行 MongoDB 查询排序?

有没有办法为 mongoose.js 聚合提供 allowDiskUse 选项?

无法连接到远程 mongodb 服务器

C# mongodb driver 2.0 - 如何在批量操作中更新插入?

当前的 URL 字符串解析器已弃用

MongoDB + Node JS + 基于角色的访问控制 (RBAC)

如何在 MongoDB 的 $match 中使用聚合运算符(例如 $year 或 $dayOfMonth)?

MongoException: Index with name: code already exists with different options

MongoDB InsertMany 与 BulkWrite