0


0

Mongodb、レールは非配列を変更します-kind_ofをデバッグしますか? 配列>> true

私は配列に追加しようとしています(またはrubyが言っているのは配列です)が、mongoからエラーを取得し続けます

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" : "[email protected]", "foll
owers" : null, "following" : null, "password_hash" : "98f2188de42bce1554d08fbc81
d5c99a2c234933", "password_salt" : "25d80a83cfe3d126cdbe9fec2b731ab9ea57c3b8", "
username" : "test" }

フォローとフォロワーは[]であり、nullではないと予想していました。

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 Answer


1


これは、 key:following、:type ⇒ Array`の代わりに key:following、Array`を使用してキーを宣言するときに0.8で機能します。

push_uniq`と collection.update`の両方を試しましたが、どちらでもエラーは発生しませんでした。 collection.update`の例では、コマンドがmongoに直接渡されるため、 id:value`の代わりに `_id:value`を使用する必要があります。


0


これは、mongomapperでキーを定義することと少し矛盾していることがわかりました。

配列で:type ⇒修飾子を使用しないでください。

コレクション全体を削除し、:typeを削除し、すべてを再作成しましたが、現在は動作します。