【问题标题】:Mongodb , rails modify non-array - debug kind_of? Array >> trueMongodb,rails 修改非数组 - 调试 kind_of?数组 >> 真
【发布时间】:2011-03-20 09:23:54
【问题描述】:

我一直在尝试添加到一个数组(或者 ruby​​ 说的是一个数组),但不断收到来自 mongo 的错误,上面写着

无法将 $addToSet 修饰符应用于非数组

当我尝试运行时

User.collection.update({'id'=> current.id},{'$addToSet'=>{ 'following' => current.id}}) User.collection.update({'id'=> user.id},{'$addToSet'=>{ 'following' => user.id}})

或mongomapper版本

User.push_uniq(current.id, :following => user.id) User.push_uniq(user.id, :followers => current.id)

当我输出时

返回真

但是,在运行时

db.users.find()

直接反对mongo,我明白了

{ "_id" : ObjectId("4c4a196f15a79004e0000007"), "email" : "test@test.com", "foll
所有者”:null,“以下”:null,“password_hash”:“98f2188de42bce1554d08fbc81
d5c99a2c234933", "password_salt" : "25d80a83cfe3d126cdbe9fec2b731ab9ea57c3b8", "
用户名”:“测试”}

我希望 follower 和 follower 是 [],而不是 null。

当我输出 debug @user.followers 时,rails 显示 --- []

我创建用户的模型是

键:用户名,:类型=>字符串 键 :email, :type => 字符串 键 :password_hash, :type => 字符串 键 :password_salt, :type => 字符串 键:追随者,:类型=>数组 键 :following, :type => 数组

该错误使我相信 user.followers 正在被发现,但无法更新。 当我改变

 User.push_uniq(current.id, :testing => user.id)

我没有收到错误,所以我认为我的那部分是正确的。 有什么建议吗?

【问题讨论】:

  • 这看起来像是 MongoMapper 中的一个潜在错误。我建议将此发布到 MM Google 组。正如您所发现的,数据库中的字段必须以数组开头。

标签: ruby-on-rails mongodb mongomapper


【解决方案1】:

当使用 key :following, Array 而不是 key :following, :type => Array 声明密钥时,这适用于 0.8。

我尝试了push_uniqcollection.update,但都没有出错。在您的 collection.update 示例中,您确实需要使用 _id: value 而不是 id: value,因为该命令直接传递给 mongo。

【讨论】:

    【解决方案2】:

    事实证明,这与在 mongomapper 中定义键有点不一致。

    不要在数组中使用 :type => 限定符。

    我删除了整个集合,删除了 :type,然后重新创建了所有内容,现在它可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2021-01-12
      • 2014-06-14
      相关资源
      最近更新 更多