如何在字符串字段和 ObjectId 之间进行查找 - MongoDB C# 驱动程序

How to do a lookup between string field and ObjectId - MongoDB C# Driver

我有这些合集:

1 - 订单:

{ 
    "_id" : ObjectId("5ac68963b305462bc88150f6"), 
    "ClientId" : "5aabc24bb3054633a4053a9f" 
}

2 - 客户:

{ 
    "_id" : ObjectId("5aabc24bb3054633a4053a9f"), 
    "Name" : "Tiago", 
    "Email" : "tiago@email.com", 
}

我想引入Order,来自Client的数据。但是因为 ClientId 是一个字符串,而 Client 中的 _id 是一个 ObjectId,所以我无法在两者之间进行查找。

我正在使用 MongoDB C# 驱动程序,这是我到目前为止的代码:

var order = _database.GetCollection<Order>.Aggregate().Match(myFilter).Lookup("Client", "ClientId", "_id", "MyPropertyToFill").As<Order>().FirstOrDefault();

知道怎么做吗?

在您的模型中,您必须将 iClientId 定义为 ObjectId,如下所示:

const mongoose = require('mongoose')
const Schema = mongoose.Schema

const Order = new Schema({
  iClientId: Schema.Types.ObjectId
  // Rest of the Field
})

module.exports = mongoose.model('order', Order)

现在在您要查找的文件中

const mongoose = require('mongoose')
const ObjectId = mongoose.Types.ObjectId

Model.aggregate([
  {$match: {_id: ObjectId('filter_id')}},
  {$lookup: {
    from: 'client',
    localField: 'ClientId',
    foreignFiled: '_id',
    as: 'fromclient'
  }}
], (err, result) => {
 // Your action
})

这就是你如何实现的,我已经用 mongoose 做到了,但你也可以在没有 mongoose 的情况下做到这一点。