2017-10-06 5 views
0

の配列を返す:のMongoDBの集計プロジェクトは_id

db.collections.distinct("_id"); 

を私の質問は、私が行う必要がある場合、私は_idの配列を得ることができる方法であります集合体を持つ複雑な論理。 例:

db.getCollection('users').aggregate({ 
     $match : { 
      is_register_completed : { $ne : true} 
     } 
    } 
    //other operator like $lookup, $group 
    , 
    { 
     $project : {_id:1} 
    } 
    ) 

私は私が欲しいもの

{ 
"_id" : "1", 
"_id" : "2" 
} 

を取得するには、我々は

{[1,2]} 

更新明確な操作を行うだけのようなものです: これは私が$グループをどうしようとするものです

db.getCollection('users').aggregate({ 
     $match : { 
      is_register_completed : { $ne : true} 
     } 
    }, 
    { 
     $group: { 
     _id:null, all:{$addToSet: "$_id"} 
     } 
    }, {$project: {_id:0,all:1}} 
    ) 

が、私はまだ

{ 
all : ["1","2"] 
} 

取得したり、私が

{ 
    "_id" : "1", 
    "_id" : "2" 
    } 

を取得した後.map(function(el) { return el._id })を行うことができますが、マップは、私はそれがパフォーマンスに影響を与えるだろうと思い、クライアントサイド変換です。

+0

をあなたは新たに更新されたコードをあなたの質問では、「編集」または「更新」のタグをつけていただけますか?私の答えはあなたの質問にすでに含まれているという印象のもとで下降するかもしれません。 –

+0

'distinct()'では、明らかに無効なJSONであることを意味する '{1,2}} 'ではなく、例えば[1,2]の配列を取得します。集合演算から得た結果を操作して配列を返すことができます。 – chridam

+0

@chridam yes [1,2]は私が望むものですが、私はクライアント側のマップを使って結果を操作することを好まないと言います。 –

答えて

1

編集: から引用:How to return array of string with mongodb aggregation

.aggregateを()メソッドは常に、あなたは何をすべきかに関係なく、 をオブジェクトを返していないし、それを変更することはできません。

オリジナル回答:
は、集約フレームワーク試してみてください。

db.myCol.aggregate([ 
    { 
     $group:{_id:null, array:{$push:"$_id"}} 
    }, 
    { 
     $project:{array:true,_id:false} 
    } 
]) 
+0

お返事ありがとうございます。これは私が試してみたものです。私はdb.collections.distinct( "_ id")のようにオブジェクトの配列を返す方法があることを知りたいと思います。 –

+0

集合体は常にオブジェクトを返します –