2

私は隕石を見始めたばかりで、レコード内の配列内のレコードを更新しようとして立ち往生しています。次のようなドキュメントがあるとします。

Users:
{ 
  _id: "somerandom",
  name: "name1",
  items, [
    {
      name: "item1",
      data: "somedata",
      ...
    },
    {
      name: "item2",
      data: "somedata",
      ...
    }
  ],
  ...
},
...

そして、アイテム「item1」のデータを更新したいと思います。meteor でこれを行う方法については何も見つかりませんが、MongoDB について読んだことから、正しい方法は次のようになると思います

Users.update({_id: userId, "items.name": 'item1}, {$set: {"items.$.data": newData}});

しかし、Meteor で使用されている MongoDB は $ をサポートしていないため、機能しません。

誰かがこれに対する解決策を持っていますか?

4

2 に答える 2

2

Meteor.methods()サーバー側でデータベース操作を使用および実装Meteor.call()し、クライアントから使用して呼び出します。この機能は Meteor にはまだ実装されておらず、ここに文書化されています。

Github で提起されたこの問題に関する議論の詳細については、こちらを参照してください。

于 2013-03-11T18:02:13.503 に答える
1

meteor の github で回避策を見つけましたhttps://github.com/meteor/meteor/blob/master/examples/parties/model.js

アイデアは、最初に変更したい配列項目のインデックスを取得し、次に $ の代わりにそのインデックスを使用することです。したがって、この場合は次のようになります

user = Users.findOne(userId);
index = _.indexOf(_.pluck(user.items, 'name'), 'item1');

modifier = {$set: {}};
modifier.$set["items." + index + ".data"] = newData;
Users.update(userId, modifier);
于 2013-03-12T07:41:44.790 に答える