NodeJS查询结果中的Mongo DB差异

时间:2016-08-26 17:48:33

标签: node.js mongodb projection

在MongoDB(3.2.7)shell中执行以下查询:

<RelativeLayout
    android:id="@+id/layout_progressbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginTop="20dp"
    android:layout_toEndOf="@+id/iv_image"
    android:layout_toRightOf="@+id/iv_image"
    android:gravity="bottom"
    android:orientation="horizontal" >

    <ImageButton
        android:id="@+id/bt_next"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:enabled="false"
        android:src="@drawable/ic_arrow_right"
        android:text="@string/bt_next" />

    <ImageButton
        android:id="@+id/bt_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@+id/tv_resultmessage"
        android:layout_toLeftOf="@+id/bt_next"
        android:layout_toRightOf="@+id/tv_resultmessage"
        android:layout_toStartOf="@+id/bt_next"
        android:background="@null"
        android:src="@drawable/ic_info" />

    <TextView
        android:id="@+id/tv_resultmessage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true" />

    <ImageButton
        android:id="@+id/bt_praxis"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@+id/bt_back"
        android:layout_toLeftOf="@+id/tv_resultmessage"
        android:layout_toRightOf="@+id/bt_back"
        android:layout_toStartOf="@+id/tv_resultmessage"
        android:background="@null"
        android:src="@drawable/ic_praxis" />

    <ImageButton
        android:id="@+id/bt_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:src="@drawable/ic_arrow_left"
        android:text="@string/bt_back" />

    <ProgressBar
        android:id="@+id/pb_quiz"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/bt_back"
        android:padding="5dp"
        android:progress="1" />
</RelativeLayout>

我得到了我需要的东西:

db.coll.aggregate({$group: {_id : '$Name', count : {$sum: 1 }}}, {$project: { _id:0, Name: '$_id', count: 1 }})

我想在NodeJS(mongodb节点模块2.2.5)中使用这个聚合,所以我定义了一个API:

{ "count" : 4, "Name" : "Name1" }
{ "count" : 5, "Name" : "Name2" }
{ "count" : 1, "Name" : "Name3" }
{ "count" : 9, "Name" : "Name4" }

当我执行此API时,我得到的结果与shell结果不同:

app.get('/api', function(req, res){
        db.collection('coll').aggregate({$group: {_id : '$Name', count : {$sum: 1 }}}, {$project: { _id: 0, Name: '$_id', count: 1 }}).toArray(function(err, docs) {
            if (err) {
                assert.equal(null);
            }
            else {
                console.log(docs);
                res.json(docs);
            }
        });
    });

有谁知道为什么会这样?似乎[{"_id":"Name1","count":4},{"_id":"Name2","count":5},{"_id":"Name3","count":1},{"_id":"Name4","count":9}] 函数没有在NodeJS API中执行。

1 个答案:

答案 0 :(得分:0)

documentation表示管道(matrix = "\n".join([" ".join(["0" for x in range(4)]) for x in range(4)]) print matrix 的第一个参数)应该是一个数组:

aggregate