Mongoose不能只查询数据库

时间:2017-11-30 23:45:55

标签: node.js mongodb mongoose mongoose-schema

我面对着一种猫鼬的奇怪行为。

让我们分析这个简单的愚蠢代码。

var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1/sodatest', {
    useMongoClient: true
});

var db = mongoose.connection;

var OriginalSchema = mongoose.Schema({
    addedd: Date,
    endPoint: Object,
    inserted: Number,
    total: Number
});


var OtherTestSchema = mongoose.Schema({
    what: String,
    modified_at: Date
});


var EndPointInTheDb = mongoose.model('aaa', OriginalSchema);

db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
    console.log("we are connected!");
});


EndPointInTheDb.find({}, (err: String, exit: any) => {
    console.log("Errore : " + err)
    console.log(exit)
});

失败并返回

we are connected!
*********************
Error : null
[]
*********************

它失败了,因为收集" aaa"有15个元素。

如果我更改数据库" sodatest"与任何其他(除了另一个名称小写)和' aaa'使用另一个集合名称时,如果我使用正确的大小写,则无关紧,它会返回正确的结果。

we are connected!
*********************
Error  : null
[ { _id: 59f76203592b426a16b8b32f,
    modified_at: 2017-10-30T17:31:47.622Z,
    last_position: 5,
    what: 'CONTATOREGEOKEY',
    __v: 0 } ]
*********************

(它也适用于多个元素)

我试图将数据库复制到另一个数据库中,

db.copyDatabase("sodatest","Prova14")

名称至少包含一个大写字符(Prova14),但同样没有结果。

如果我拼错了一个名字,我已经查了几个小时,但是我确实知道了。

如果我使用与集合真实模式不匹配的模式(" OtherTestSchema"),我也无法理解为什么它可以与任何其他数据库(其他14个具有异构模式)一起工作。 ......但不是最好的。

任何想法?

1 个答案:

答案 0 :(得分:1)

如果没有提供,那么Mongoose会自动在集合名称的末尾添加一个“s”。例如:

// This will create a collection called 'aaas' since 'aaa' is passed as the 
// model name
var EndPointInTheDb = mongoose.model('aaa', OriginalSchema);

// This is how you declare your collection name with a custom collection 'aaa'
var CorrectEndPointInTheDbToCollection = mongoose.model('aaa', OriginalSchema, 'aaa');

CorrectEndPointInTheDbToCollection.find({}, function(err, docs){
    console.log(docs)
})

因此mongoose的初始化程序是mongoose.model('model name',Schema,'optional collection name')。强烈建议您传递集合名称,以便知道它指向正确的集合