AddToSet操作需要目标数组字段

时间:2017-06-03 15:33:36

标签: azure-cosmosdb

尝试使用MongoDB驱动程序来使用Azure DocumentDB / CosmsoDB。我了解到,由于目前尚未实现全套功能,因此存在许多限制。我想使用聚合函数,特别是$ group和.distinct,但我认为它还没有。作为一种解决方法,我试图保持一个单独的跟踪"文档以启用" distinct"。尝试使用$ addToSet更新文档,但获得以下内容:

MongoError: Message: {"Errors":["Encountered exception while executing function. Exception = Error: AddToSet operation requires a target array field.\r\nStack trace: Error: AddToSet operation requires a target array field.\n   at arrayAddToSet (__.sys.commonUpdate.js:2907:25)\n   at handleUpdate (__.sys.commonUpdate.js:2649:29)\n   at processOneResult (__.sys.commonUpdate.js:2484:25)\n   at queryCallback (__.sys.commonUpdate.js:2461:21)\n   at Anonymous function (__.sys.commonUpdate.js:619:29)"]}

我正在使用的更新命令:

var usersDocument = collection.updateOne(
   { "type": "users" },
   { $addToSet: {users: "someone@gmail.com"} },
    function(err, count, status) {
        console.log("updateOne err: " + err)
        console.log("updateOne count: " + count)
        console.log("updateOne status: " + status)
    }
)

在我看来,这是一个非常简单的命令,从mongo文档和根据需要调整的字段中提取。也许我错过了一些非常基本的东西?

我的最终目标是确保我的代码是可移植的,以便能够将其移动到Mongo群集中,如果我愿意的话(不要锁定到Azure特定的)。为了开始而不必管理多服务器集群,Azure CosmosDB看起来像一个很棒的快速启动,但是这些限制令人抓狂。

更新: 现在我已经修复了我的文档并且实际上有一个带有数组的字段,$ addToSet只是替换了值,而不是添加到数组中。我将为此创建一个新问题。

1 个答案:

答案 0 :(得分:0)

是的,基本的东西。错误消息实际上是正确的。检查现有文件后: 我找到了:

{ "users": "[]" }

并将其更改为:

{ "users": [] }

现在它正在运作。