我正在使用node.js进行mongodb连接查询,我有两个集合,我想连接这两个集合并填充数据。
饮品系列
[{
"_id": "580a2f7615a0161010a23bfg",
"name": "Pepsi",
"createDate": "2016-10-21T15:08:27.405Z"
}, {
"_id": "580a2f7615a0161010bge345",
"name": "Mirinda",
"createDate": "2016-10-21T15:08:27.405Z"
}, {
"_id": "580a2f7615a0161010vbgdt5",
"name": "Coke",
"createDate": "2016-10-21T15:08:27.405Z"
}, {
"_id": "580a2f7615a0161010vb9876",
"name": "Thums Up",
"createDate": "2016-10-21T15:08:27.405Z"
}, {
"_id": "580a2f7615a0161010vbgmnk9",
"name": "Slice",
"createDate": "2016-10-21T15:08:27.405Z"
}]
订单收集
[{
"_id": "580fa9a92bb22e783b298798",
"created_at": "2016-10-25T18:41:53.716Z",
"tab": [{
"created_at": "2016-10-26T00:21:33.100Z",
"cost": 30,
"quantity": 7,
"name": "Mirinda"
}]
},
{
"_id": "580fa9a92bb22e783b29887h",
"created_at": "2016-10-25T18:41:53.716Z",
"tab": [{
"created_at": "2016-10-26T00:21:33.100Z",
"cost": 25,
"quantity": 5,
"name": "Pepsi"
}]
}]
所以我想通过加入饮料系列来找到订单系列的名称。
订单架构
var mongoose = require("mongoose");
var OrderSchema = new mongoose.Schema({
tab: [{
quantity: Number,
cost: Number,
name: {
type: String
},
created_at: {
type: Date
}
}],
});
module.exports = mongoose.model("Order", OrderSchema);
饮料方案
var mongoose = require('mongoose'),
utilities = require('../config/utilities');
var DrinkSchema = mongoose.Schema( {
drinks_name: { type: mongoose.Schema.Types.ObjectId, ref: 'Order' },
name: {
type: String
},
id: {
type: String
},
createDate: {
type: String
},
})
module.exports = mongoose.model("Drinks", DrinkSchema);
Node.js代码
var Drinks = require("../models/drinks"),
Orders = require("../models/orders"),
async = require('async'),
mongoose = require('mongoose');
exports.getOrdersList = function(req, res) {
//How to Join Drinks and Orders Collection ?
Drinks
.find({})
.populate('drinks_name', 'tab.name')
.exec(function (err, result) {
console.log('The Drinks List is', result);
});
}
请通过我的上述职位,让我知道,如果你有任何解决方案。
4条答案
按热度按时间o2rvlv0m1#
MongoDB是NoSQL数据库,所以你无法在MongoDB中进行连接。我的理解是,你想根据“Orders”的name字段从“Drinks”中检索数据。你可以做的是在Orders集合中找到每个文档的“tab.name”字段,然后在Drinks集合中找到它的“_id”字段。
然后,您可以连接这两个结果,或多或少地得到您想要的。
voj3qocg2#
看起来你的问题是错误的...你需要得到订单信息沿着项目,但项目名称应填充从饮料收集...
订单架构:
饮料方案
~
节点编码:
输出功率
erhoui1w3#
MongoDB本身并不支持连接,但我们可以通过两种不同的方式实现连接方法:
如果已经使用mongoose ODM创建了一个模式,则可以使用
Drinks.find({}).populate('orders').exec(cb)
.下面是订单和饮料的模式中的一个小变化。您不需要成本字段,因为它可以基于每种饮料的数量进行计算。还可以找到填充查询。
如果订单中的特定数量被更新以反映在订单中,则必须编写一个查询来更新订单,并且可以使用聚合框架来计算特定表上的订单成本。
mrfwxfqh4#