Po prostu uczę się indeksowania w Mongoose / MongoDB i nie wiem, dlaczego to nie działa.

To jest mój schemat

const timeSchema = new mongoose.Schema({
    actionId:{
        type:String,
        required:true
    },
    start: {
        type: Date
    },
    end: {
        type: Date
    },
    user:{type : mongoose.Schema.Types.ObjectId, ref : 'User'},
    task:{type : mongoose.Schema.Types.ObjectId, ref : 'Task'},
    pausedSeconds:{
        type: Number,
        default: 0
    }
});

const Time = mongoose.model('Time', timeSchema)

Chcę mieć indeks tekstowy w dwóch wypełnionych polach użytkownik i zadanie, utworzyłem indeks w ten sposób

timeSchema.index({"user.name":"text","task.taskName":"text"})

Oto przykład dokumentów

{
            "pausedSeconds": 18,
            "_id": "5db1dde8d5bc93526c26fa38",
            "actionId": "5feaebcf-6b90-45be-8104-452d643472a0",
            "user": {
                "_id": "5d4af77e4b6cbf3dd8c5f3ac",
                "name": "admin"
            },
            "task": {
                "_id": "5d4aff2f61ad755154b8a1c6",
                "taskName": "task 1 updated!"
            },
            "start": "2019-10-24T17:22:48.000Z",
            "end": "2019-10-24T17:30:00.000Z"
        },

Mam jeden problem i jedno pytanie Problem jest taki:

To, co próbuję zrobić, to uzyskać wszystkie dokumenty, które mają "zaktualizowane zadanie 1" (dla zadania.nazwa_zadania) lub "admin" (dla nazwa.użytkownika) robiąc to w ten sposób

Time.find({ '$text': { '$search': "admin" } })

Time.find({ '$text': { '$search': "task 1 updated" } })

Ale nie wydaje się działać

Pytanie brzmi: Co mam zrobić, jeśli chcę wyszukać tekstowo pola zaczynające się i kończące jako typ daty lub dla pola pausedSeconds będącego typem liczbowym?

Z góry dziękuję

0
R.Romero 19 listopad 2019, 20:13
„Problem: .. ale wygląda na to, że nie działa”: Co nie działa. Proszę wyjaśnić, więcej. Czy jest wynik i wygląda źle, czy nie ma żadnego wyniku.
 – 
prasad_
20 listopad 2019, 07:41

1 odpowiedź

W zapytaniu nie określasz, jakiej właściwości szukać. Zrób to: Time.find({taskName: { '$text': { '$search': "admin" }}}).

Nie jestem też pewien, czy po prostu nie wyświetlasz całego kodu lub czy faktycznie wykonujesz zapytanie źle, ale powinno być napisane w ten sposób:

Time.find({taskName: { '$text': { '$search': "admin" }}}).exec(function(err, times) {
    if(err) return console.log(err);
    console.log(times);
});
0
chrispytoes 19 listopad 2019, 20:46