5

私はこの形式でデータを保存しているコレクションを持っています:

{
    _id: ObjectId("51b9be6dbbdeef1e5f008cca"),
    name: 'sfdsfsdfsdfsdfsd'
    details: {
        varA: {
            created: "2013-06-13T12:43:25.853Z",
            validity: "2013-07-13T12:43:25.853Z",
            modified: "2013-06-13T12:43:25.853Z"
        },
        varB: {
            created: "2013-06-13T12:43:25.853Z",
            validity: "2013-07-13T12:43:25.853Z",
            modified: "2013-06-13T12:43:25.853Z"
        }
    }
}

この形式のvarAデータのみを公開できるようにしたいと思います(ネストされた深さはありません...):

{ 
    _id: ObjectId("51b9be6dbbdeef1e5f008cca"),
    name: 'sfdsfsdfsdfsdfsd',
    created: "2013-06-13T12:43:25.853Z",
    validity: "2013-07-13T12:43:25.853Z",
    modified: "2013-06-13T12:43:25.853Z"
}

残念ながら、私のクエリ(投影を使用している場合):

db.coll.find({}, {'details.varB': 0})

次のようなものを返します:

{
    _id: ObjectId("51b9be6dbbdeef1e5f008cca"),
    name: 'sfdsfsdfsdfsdfsd',
    details: {
        varA: {
            created: "2013-06-13T12:43:25.853Z",
            validity: "2013-07-13T12:43:25.853Z",
            modified: "2013-06-13T12:43:25.853Z"
        }
}

検索クエリを改善して、期待される形式を返すにはどうすればよいですか?

私を助けてくれる人たちに前もって感謝します;-)

PS ここでは、mongo シェルを使用してデータを取得していますが、このクエリを node-mongodb-native を使用して node.js で動作させる必要があります。

4

1 に答える 1

5

ここのブログ投稿で説明されているように、集計関数のみでこれを行いました

あなたの場合、これは機能します

db.temp.aggregate (
   {
      $project : 
      {
         name:"$name",
         created:"$details.varA.created",
         validity:"$details.varA.validity",
         modified:"$details.varA.modified"
      }
   }
);

また

db.temp.aggregate ({$project:{name:"$name",created:"$details.varA.created",validity:"$details.varA.validity",modified:"$details.varA.modified"}});

これはサンプル実行です

> db.temp.insert ({name:'sfdsfsdfsdfsdfsd', details: { varA : { created: "2013-06-13T12:43:25.853Z", validity: "2013-07-13T12:43:25.853Z", modified: "2013-06-13T12:43:25.853Z"}, varB : { created: "2013-06-13T12:43:25.853Z", validity: "2013-07-13T12:43:25.853Z", modified: "2013-06-13T12:43:25.853Z" } } })
> db.temp.aggregate ({$project:{name:"$name",created:"$details.varA.created",validity:"$details.varA.validity",modified:"$details.varA.modified"}});
{
        "result" : [
                {
                        "_id" : ObjectId("51b9d7151723a9c4d6bc9936"),
                        "name" : "sfdsfsdfsdfsdfsd",
                        "created" : "2013-06-13T12:43:25.853Z",
                        "validity" : "2013-07-13T12:43:25.853Z",
                        "modified" : "2013-06-13T12:43:25.853Z"
                }
        ],
        "ok" : 1
}
于 2013-06-13T14:31:27.547 に答える