Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 猫鼬_id";在使用map/reduce创建的集合中消失_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 猫鼬_id";在使用map/reduce创建的集合中消失

Node.js 猫鼬_id";在使用map/reduce创建的集合中消失,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我在mongo控制台中完成了一个非常简单的map/reduce var mapState = function () { emit(this.state, 1); }; var sumState = function (keyState, valuesCount) { return Array.sum(valuesCount); }; db.FooBar.mapReduce( mapState, sumState, {out: "state_count

我在mongo控制台中完成了一个非常简单的map/reduce

var mapState = function () {
    emit(this.state, 1);
};

var sumState = function (keyState, valuesCount) {
    return Array.sum(valuesCount);
};

db.FooBar.mapReduce(
    mapState,
    sumState,
    {out: "state_counts"}
);

var sc = {};

db.state_counts.find(
    {_id: {$exists: true}}).forEach(
        function(o){
            sc[o._id]=o.value;
        }
    );


> sc
{
    "ak" : 29,
    "al" : 5832,
    "ar" : 2798,
    ...
}

> db.state_counts.find().limit(3)
{ "_id" : "ak", "value" : 29 }
{ "_id" : "al", "value" : 5832 }
{ "_id" : "ar", "value" : 2798 }
到目前为止还不错。我在“sc”对象中有预期的状态缩写和计数。在使用mongoose将数据转换为与“sc”对象等效的数据之前,当我试图从state_计数中提取数据时,会出现奇怪的情况

#!/usr/bin/env node

mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/thedb");

var schema = new mongoose.Schema({});

schema.collection = 'state_counts';
console.log(schema.collection);

var cur = mongoose.model(schema.collection, schema);

cur.find({}).exec(
    function(err, data) {
        if (err) {
            console.log(err);
            mongoose.disconnect();
        }
        console.log(data);
        mongoose.disconnect();
    }
);

$ ./test.js
state_counts
[ { value: 29 },
{value: 5832 },
{ value: 2798 },
...
]

这让我很惊讶。为什么在使用mongoose时,脚本中没有显示“_id”值

\u id
未显示,因为您尚未定义架构,而mongoose的全部任务是向mongodb添加架构。因此,给定一个完全空的模式,mongoose可能会假设
\u id
将是
ObjectId
类型(这是mongodb的常规),当将mongodb中的数据强制转换为该类型时失败,因为它总是会在给定数据的情况下这样做,mongoose会忽略该值,考虑到猫鼬的大部分工作是执行一致的模式,这是有道理的。这将“修复”它

是的。我期待着对象id的“默认”行为出现。
var schema = new mongoose.Schema({_id: String, value: Number});