![](/img/trans.png)
[英]How to convert string to ObjectId type and use in $lookup for mongodb?
[英]How to use ObjectId in $lookup using mongodb nodejs drivers
请帮助我找到合适的解决方案
收集用户详细信息的集合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进行比较,因此返回空白,是否有任何方法可以执行此任务?
在查找之前添加此
$project:{
$let:
{
vars: { id:'_id.$oid' },
in: ObjectId("$$id")
}
}
改成
$lookup: {
from: 'bookings',
localField: '_id.$oid',
foreignField: 'user_id',
as: 'bookings'
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.