首先我会因为我的英语不好而找借口,但我会尽力解释自己。我是一个学生,一直在尝试用express开发nodejs项目,直到现在我一直在单个json文件中用作数据库并通过它工作。但是现在我想迁移到Mongodb。我已经用“ mongoimport --db RestauranteSin”-集合“ Restaurante”-file'filename'“导入了数据库,所以可以导入了。
我下一步要做的就是创建一个新端点
app.get('/mongoAllRestaurants', (req, res) => {
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect("mongodb://localhost:27017/", { useNewUrlParser: true },(err, db) => {
if (err) throw err;
var dbo = db.db("RestauranteSin");
var ObjectId = require('mongodb').ObjectID;
dbo.collection("Restaurante").find({_id:ObjectId("5bd218627c5b747cdb14c51e"), restaurantes: {$elemMatch : {titulo_restaurante: "BarJanny"}}}).toArray((err, result) => {
if (err) throw err;
console.log(result[0]);
res.send(result);
db.close();
});
});
});
我的数据库是这样的:
[
"_id" : "345678987654",
"restaurantes": [
{
"titulo_restaurante": "example1",
...
...
...
},
{
"titulo_restaurante": "example2",
...
...
...
},
...
...
...
]
]
这是问题。 ¿为什么即时通讯在执行查询时会返回没有筛选器的所有数据库?我查询的很多组合,它总是返回我所有的数据库或空数组?结果,我需要这样的东西:
{
"titulo_restaurante": "example1",
...
...
...
}
答案 0 :(得分:0)
查询代码中有两个错误:
您缺少new
命令。当您找到有关
_id,您正在寻找具有特定inizialization(它是id字符串)的ObjectID对象,因此必须创建该对象
您正在搜索:new ObjectId('idString'),结果将是
可以与文档_id进行比较的ObjectID以查找
正确的文档(请注意,对于var ObjectId = require('mongodb').ObjectID;
,您需要mongodb程序包的ObjectID类,并将其分配给var ObjectId)。
不推荐使用find内的投影。您可以使用projection(),如下所示:db.collection('collectionName').find({ field: value }).project({ field: value })
对于您的查询是:dbo.collection("Resturante").find({ _id: new ObjectId('5bd218627c5b747cdb14c51e') }).project({ restaurantes: { . $elemMatch: { titulo_restaurante: "BarJanny" } } })
因此,您的查询没有错误:
dbo.collection("Resturante")
.find({ _id: new ObjectId('5bd218627c5b747cdb14c51e') })
.project({ restaurantes: { $elemMatch: { titulo_restaurante: "BarJanny" } } })
.toArray((err, result) => {
if (err) throw err;
console.log(result[0].restaurantes[0]); // { titulo_restaurante: 'BarJanny' }
db.close();
});
在res.send(result)
之前添加db.close()
以获取GET响应。