How can I use query.fullText()?

It returns this value.

tokenURIData_text

Should I need to use this return value like this?

query.fullText('tokenURIData_text', 'xxx')

How can I list indexes?
Could you tell me how to list indexes?

I listed indexes.

[
  { v: 2, key: { _id: 1 }, name: '_id_' },
  {
    v: 2,
    key: { _fts: 'text', _ftsx: 1 },
    name: 'tokenURIData_text',
    weights: { tokenURIData: 1 },
    default_language: 'english',
    language_override: 'language',
    textIndexVersion: 3
  }
]

Do you still get an error?

Yeah, it still occurs exception.

{"ok":0,"code":27,"codeName":"IndexNotFound","name":"MongoError"}

Did you try the exact syntax used here for the query?

This is my creating index code.

await client.db('admin').command({ ping: 1 });
console.log('Connected successfully to server');

const database = client.db("parse")
const collection = database.collection("TblColllection")

const res = await collection.createIndex({ tokenURIData: "text" })

So after this code, I listed the indexes and result is like below.

[
  { v: 2, key: { _id: 1 }, name: '_id_' },
  {
    v: 2,
    key: { _fts: 'text', _ftsx: 1 },
    name: 'tokenURIData_text',
    weights: { tokenURIData: 1 },
    default_language: 'english',
    language_override: 'language',
    textIndexVersion: 3
  }
]

And I used query.fullText method on cloud function as below.

query.fullText('tokenURIData', request.params.keyword);

The original code was also doing a query after creating the index

Yeah, right. But the code was on client side.
But I need to implement this feature on cloud functions.

yes, just wanted to know if it works that code in client side that was used there

I added this code on client side and it is also not working.

const datas = await collection.aggregate([{ $match: { $text: { $search: "test" } } }]).toArray();
console.log(datas);

And there’s a record which tokenURIData contains ‘test’, but it returns empty array.

original code

await client.connect()

const database = client.db("parse")
const collection = database.collection("itemCreatedData")

await collection.createIndex({ title: "text" })

const datas = await collection.aggregate([{ $match: { $text: { $search: "queen" } } }]).toArray()

new code:

await client.db('admin').command({ ping: 1 });
console.log('Connected successfully to server');

const database = client.db("parse")
const collection = database.collection("TblColllection")

const res = await collection.createIndex({ tokenURIData: "text" })

const datas = await collection.aggregate([{ $match: { $text: { $search: "test" } } }]).toArray();
console.log(datas);

seems similar

maybe you can also try this: const datas = await collection.aggregate([{ $match: { $tokenURIData_text: { $search: "test" } } }]).toArray();
I think that you already tried it.

It may be easier to use a regexp

Yeah, I tried and it works the same. :sob:

regexp part doesn’t work either?

When I use regexp on normal javascript, we don’t use quote like below.
regexp = /test/g;

But when I use this format on cloud function, it returns an error and requires regexp as string.
So I used ‘/test/g’, but in my opinion, in this case, it is searching ‘/test/g’ string not regexp string.

And I tried with this code and in this case it occurs exception but exception is an empty object.

            pipelin.push({
                match: {
                    tokenURIData: { $regex: `/${request.params.keyword}/g` },
                },
            })

regexp should work without issues, try with simpler queries maybe, hardcoded values

I tried in various solutions with regexp.
Could you send me the sample code which check if column contains the substring?
Thanks.

this is the other solution that could work for you:

Yeah, it works.
Thanks for your continous support!!! :+1:

1 Like