0

私はこのトピックについてたくさん検索しましたが、私は完全に迷子になっています。これが私の問題です(私はmongojsでnode.jsを使用しています):

この種の書類が欲しいのですが:

{ 
    "_id" : ObjectId("50ce2f7f98fa09b20d000001"), 
    "beginTime" : 1355689855016, 
    "tags" : {
        "primary": [ 29, 12, 16], 
        "secondary": [6, 8, 9]
    },
    "user" : "50bdddc601de4681d666835f"
}

しかし、たとえば「プライマリ」(このフィールドは変数からのものであることに注意してください)の下に新しいタグをプッシュしようとすると、

tags = {};
tags[request.body.relevance] = request.body.tag;
return db.activities.update({
  '_id': db.ObjectId(request.body.activity),
  'user': request.session.user.id
}, {
  $push: {
    tags: tags
  }
});

それから私は得る

{ "_id" : ObjectId("50ce2f7f98fa09b20d000001"), "beginTime" : 1355689855016, "tags" : [ { "primary" : 29 }, { "primary" : "24" }, { "primary" : "1" } ], "user" : "50bdddc601de4681d666835f" }

$ pushをネストするなど、他の多くのバリエーションを試しました(魔女はそれをフィールドooに変換しました)。とにかく、私はいつも失敗しました。また、この時点で私は本当にT_Tを飢えています

私を助けてください。ありがとう。

4

1 に答える 1

1

演算子の値は$push、親ではなく、プッシュ先の配列フィールドである必要があります。

代わりにこれを試してください:

...
return db.activities.update({
  '_id': db.ObjectId(request.body.activity),
  'user': request.session.user.id
}, {
  $push: {
    'tags.primary': tags.primary,
    'tags.secondary': tags.secondary
  }
});

アップデート

これを動的に行うには、次のようなことを行う必要があります。

...
var push = {};
push['tags.' + request.body.relevance] = request.body.tag;
return db.activities.update({
  '_id': db.ObjectId(request.body.activity),
  'user': request.session.user.id
}, {
  $push: push
});
于 2012-12-16T21:22:58.470 に答える