【问题标题】:Mongodb Dot Notation Not Updating ArrayMongodb点符号不更新数组
【发布时间】:2019-09-25 01:32:27
【问题描述】:

我在使用 mongodb 的数组点表示法时遇到问题。

用户对象中的“bases”数组中有一组基数,我试图通过点表示法对其进行更新。更复杂的是,我将更新推送到函数数组中,并使用 Async 库调用它们。

//NOTE: baseIndex, baseData, dbCollection and baseOwner are considered defined already.
let updateArray = []
let thisUpdateObject = {}
thisUpdateObject['$set'] = {}
thisUpdateObject['$set']['bases.'+baseIndex] = baseData
let thisUpdate = function(callback){
    dbCollection.update({'id':baseOwner},thisUpdateObject,function(err, result){
        if (err){
            callback(err)
        } else {
            callback(null, result);
        }
    });
}
updateArray.push(thisUpdate)
async.parallel(updateArray,function(err, results){
            if...

我的结果如下:

n: 0,
nModified: 0,
ok: 1 }

我已经验证了 bases 数组存在于与 'id':baseOwner 匹配的文档中。数组中确实存在元素零(这无关紧要,但它确实已经存在。)

当我将更新粘贴到控制台时,我得到以下信息:

'$set': { 'bases.0': { *contains correct object*}}

最后,我知道异步更新系统正在工作,因为在不包含点符号的情况下,更新IS正确地更改了文档。

我假设我的点符号有问题,但我看不出是什么。

我是否犯了明显的错误?

【问题讨论】:

  • 请注意更新结果中的n: 0。这告诉您您的查询不匹配任何文档。确保baseOwner 是预期的值和类型,并确保您对id 的使用是正确的并且您不是指_id
  • 这正是答案。 ...不知何故,我的 baseOwner 被转换为字符串而不是 int 并且它不匹配。谢谢你! (我已经盯着这个太久了。)
  • 哈哈,没问题。很容易获得这样的隧道视野。很高兴您找到了您正在寻找的答案!我将继续提交我在此处提到的内容作为答案,以便我们将其标记为已解决:)
  • 请做。感谢您的帮助。
  • 为了记录,如果来自baseOwner 的值来自网页的表单输入,那么通常情况下输入的默认类型是文本。在这些情况下,期望一个数值并实际接收到一个字符串是很常见的。棘手的小虫子就在那里!

标签: node.js mongodb mongodb-update


【解决方案1】:

在 cmets 的简短讨论得出了一个简单的答案:

结果中的n: 0 表示没有文档匹配更新查询。罪魁祸首是baseOwner 变量中包含的不正确的id 值。

【讨论】:

    猜你喜欢
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2016-08-16
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    相关资源
    最近更新 更多