请帮我找一个合适的解决方案
收集用户的详细信息存储在 app_users
中{
_id: {
$oid: "abcd1235a6ad4a56dadasd"
},
user_name: "vikas Kandari",
user_dp: "ASDAD486412.jpg"
}
用户预订存储的集合预订
{
_id : {
$oid : "asdasdasdasdasd"
},
user_id : "abcd1235a6ad4a56dadasd",
booking_item : "some product",
booking_date : "datetime"
}
我使用的查找(左连接)查询是
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
const url = 'mongodb://root:root@localhost:3000/app';
const dbName = 'app';
MongoClient.connect(url, function(err, client) {
assert.equal(err, null);
console.log("Connected successfully to server");
const db = client.db(dbName);
const collection = db.collection('users');
collection.aggregate([{
$lookup: {
from: 'bookings',
localField: '_id',
foreignField: 'user_id',
as: 'bookings'
}
}]).toArray(function(err, docs) {
assert.equal(err, null);
console.log(docs);
});
client.close();
});
我想从用户集合中选择具有相应用户详细信息的预订但是它返回空白,因为mongodb正在将字符串与objectId进行比较,那么有没有办法执行此任务?
答案 0 :(得分:0)
在查找之前添加此内容
$project:{
$let:
{
vars: { id:'_id.$oid' },
in: ObjectId("$$id")
}
}
更改为
$lookup: {
from: 'bookings',
localField: '_id.$oid',
foreignField: 'user_id',
as: 'bookings'
}