代码之家  ›  专栏  ›  技术社区  ›  Tiago Ávila

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

  •  0
  • Tiago Ávila  · 技术社区  · 6 年前

    我有以下收藏:

    1-订单:

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

    2-客户:

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

    我想把客户的数据整理好。但由于ClientId是一个字符串,而Client中的\u id是一个ObjectId,因此我无法在这两者之间进行查找。

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

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

    你知道怎么做吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Naimish Kher    6 年前

    在模型中,必须将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
    })
    

    这就是你如何做到的,我用猫鼬做到了,但你也可以不用猫鼬。