0

我一直在尝试添加到一个数组(或者 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)

当我输出

<%= 调试@user.following.kind_of? 数组 %>

返回真

但是,运行时

db.users.find() 

直接反对mongo,我得到

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

我本来希望追随者和追随者是[],而不是空。

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

我创建用户的模型是

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

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

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

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

4

2 回答 2

1

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

我尝试了两个push_uniqcollection.update,并且没有得到任何一个错误。在您的collection.update示例中,您确实需要使用,_id: value而不是id: value因为该命令直接传递给 mongo。

于 2010-07-26T18:47:47.267 回答
0

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

不要将 :type => 限定符与数组一起使用。

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

于 2010-07-26T18:18:46.893 回答