【发布时间】:2018-01-06 11:25:15
【问题描述】:
和控制台日志?我特别询问_id 看起来非常不同的变量!
在调试器中,我找不到这部分:"597e874b52fba6324c9ac192"!
[ { _id: 597e874b52fba6324c9ac192,
title: 'x',
author: 'z',
body: 'y',
date: 2017-07-31T01:26:35.533Z,
comments: [],
__v: 0 },
{ _id: 597e87660726ab322c303a8e,
title: 'x',
author: 'z',
body: 'y',
date: 2017-07-31T01:27:02.266Z,
comments: [],
__v: 0 },
{ _id: 597e8773c45264303c3fcf0b,
title: 'x',
...
这是我使用的节点JS代码:
function test() {
var mongoose = require('mongoose');
mongoose.connect("mongodb://localhost:27017/test");
var Schema = mongoose.Schema;
var blogSchema = new Schema({
title: String,
author: String,
body: String,
comments: [{body: String, date: Date}],
date: {type: Date, default: Date.now},
hidden: Boolean,
meta: {
votes: Number,
favs: Number
}
});
var Blog = mongoose.model('Blog', blogSchema);
Blog.create({title: 'x', author: "z", body: "y"}, function (err, small)
{
if (err) return handleError(err);
// saved!
});
var weirdResults;
Blog.aggregate([
{$match: {author: {$exists: true}}}
], function (err, results) {
weirdResults = results;
if (err) return next(err);
console.log(weirdResults);
});
}
test();
谢谢大家!
【问题讨论】:
-
在您的调试器输出中始终显示
_id: ObjectID。还有一个“扩展”的小箭头可以显示价值。就像任何 JavaScript 对象一样。console.log()基本上调用.toString()原型并“字符串化”对象内容。这就是为什么一个直接显示值而另一个要求您“扩展”对象以检查值的原因。 -
-
@Emilio 那么当您展开它时它会显示什么?但是,是的,mongo 对象 ID 是 pretty magical
-
与远程调试器的作者一起讨论。它实际上是
ObjectId的“猫鼬”表示,它也像任何实际的“猫鼬文档对象”(由.find()返回)而不是“普通 JavaScript 对象”(由.aggregate()返回)具有“各种奇怪而奇妙的内在特性”。这通常被.toObject()或.toString()的标准 JavaScript 原型所抵消。某人的工具如何实现这些是“他们的业务”。但我确实解释了console.log()的实际作用以及为什么不同。
标签: javascript node.js mongodb debugging