尝试使用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只是替换了值,而不是添加到数组中。我将为此创建一个新问题。
答案 0 :(得分:0)
{ "users": "[]" }
并将其更改为:
{ "users": [] }
现在它正在运作。