Mongodb, рельсы изменяют не-массив - отладка Array >> true - PullRequest
0 голосов
/ 24 июля 2010

Я пытался добавить к массиву (или то, что рубин говорит о массиве), но продолжаю получать ошибку от Монго, которая говорит

Cannot apply $addToSet modifier to non-array

когда я пытаюсь запустить

 
 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)

Когда я вывожу

<%= debug @user.following.kind_of? Array %>

возвращает истину

Однако при работе

db.users.find() 

прямо против монго, я получаю

{ "_id" : ObjectId("4c4a196f15a79004e0000007"), "email" : "test@test.com", "foll
owers" : null, "following" : null, "password_hash" : "98f2188de42bce1554d08fbc81
d5c99a2c234933", "password_salt" : "25d80a83cfe3d126cdbe9fec2b731ab9ea57c3b8", "
username" : "test" }

Я бы ожидал, что подписчики и подписчики будут [], а не нулевыми.

Когда я выводлю debug @ user.followers, rails показывает --- []

Моя модель для создания пользователя

  key   :username,      :type => String
  key   :email,         :type => String
  key   :password_hash, :type => String
  key   :password_salt, :type => String
  key   :followers,     :type => Array
  key   :following, :type => Array

Ошибка заставляет меня поверить, что user.followers найден, но не может быть обновлен. Когда я меняю

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

Я не получаю ошибку, так что я думаю, что у меня есть эта часть права. Есть предложения?

Ответы [ 2 ]

1 голос
/ 26 июля 2010

Это работает в 0,8 при объявлении ключа, используя key :following, Array вместо key :following, :type => Array.

Я пробовал оба push_uniq и collection.update, но не получил ошибок ни по одному из них. В вашем примере collection.update вам нужно использовать _id: value вместо id: value, поскольку эта команда передается напрямую в mongo.

0 голосов
/ 26 июля 2010

Оказывается, это немного противоречит определению ключей в mongomapper.

Не используйте квалификатор: type => с массивами.

Я удалил всю коллекцию, удалил: напечатал и все заново, и теперь все работает

...