以下がコレクションに保存されている私のドキュメントであると考えてくださいUsers
{
_id : "User1",
joined : ISODate("2011-03-02"),
likes : {
sublikes: [
{WebsiteID:'001': WebsiteName: 'ABCD'},
{WebsiteID:'002': WebsiteName: '2BC2'},
{WebsiteID:'003': WebsiteName: '3BC3'},
//...........
//...........
{WebsiteID:'999999': WebsiteName: 'SOME_NAME'}
]
}
}
今mongodb集約フレームワークを使用して、それを取得する必要があります
collection.aggregate([
{ $project: {
_id: 1,
"UserID": "$_id",
"WebsiteName": "$likes.sublikes[0]['WebsiteName']"
}
},
{ $match: { _id: 'User1'} }
], function (err, doc) {
///Not able to get the WebsiteName: 'ABCD'
});
ドキュメントを使用$unwind
すると(特に上記の場合)、ドキュメントが大量になるため、配列内の最初のアイテムのみを取得するために巻き戻したくありません(他のアイテムに関係なく)
is にアクセスしてそのフィールドの名前を変更する方法についてのヒントを誰かに教えてもらえますか?
更新1: 私も で投影しようとしました
"WebsiteName": "$likes.sublikes.0.WebsiteName"
。うまくいきませんでした:-(
更新2: 未解決の問題 - https://jira.mongodb.org/browse/SERVER-4589
今のところ$at
動作しません。エラーをスローします:
{ [MongoError: exception: invalid operator '$at']
name: 'MongoError',
errmsg: 'exception: invalid operator \'$at\'',
code: 15999,
ok: 0 }
それまで使って
$unwind
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};