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ę
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);
});