code: def t_join_ts(self, client_con, mock_executor):
      # ==== test join TS ===
  
      modifiers = [{"$unwind": "$hist_data"}]
      res = client_con.mindsdb.house_sales_model_h1w4.find(
          {
              "collection": "example_mongo.house_sales2",
              "query": {
                  "$where": "this.saledate > latest and this.type = 'house' and this.bedrooms=2"
              },
              "modifiers": modifiers,
          },
          {
              "house_sales_model_h1w4.saledate": "date",
              "house_sales_model_h1w4.ma": "forecast",
          },
      )
      res = list(res)
  
      ast = mock_executor.call_args[0][0]
  
      expected_sql = """
            SELECT house_sales_model_h1w4.saledate as date, house_sales_model_h1w4.ma as forecast  FROM 
               (
                 SELECT * FROM example_mongo.house_sales2
                  WHERE saledate > latest
                 and type = 'house' and bedrooms=2
               ) as house_sales2
               JOIN mindsdb.house_sales_model_h1w4
          """
      assert (
          parse_sql(expected_sql, "mindsdb").to_string()
          == ast.to_string()
      )
  
      # check modifiers
      assert ast.from_table.left.modifiers == modifiers
  
imports: import datetime
  import json
  import threading
  import inspect
  from unittest.mock import patch
  import tempfile
  import os
  from pymongo import MongoClient
  from mindsdb_sql import parse_sql
  from mindsdb.api.executor.data_types.answer import ExecuteAnswer, ANSWER_TYPE
  from mindsdb.api.executor import Column
  from .executor_test_base import BaseUnitTest
label_desc: Use image node_id 4 for calling the TestMongoDBServer obj's underlying member method code with example usage: obj.t_join_ts(client_con, mock_executor) without return types