Skip to content

Query with search and then were uses OR instead of AND #410

@ayende

Description

@ayende

The following code:

async function query(queryString: QueryString): Promise<Question[]> {
  const store = asyncLocalStorage.getStore() as alStoreType;
  const loggedinUserId = store?.loggedinUserId;
  const { language, level, searchTerm, isMarkedToBeRevised, limit, page, isRevised } = queryString;
  const isMarkedToBeRevisedBoolean = convertQueryParamsToBoolean(isMarkedToBeRevised);
  const isRevisedBoolean = convertQueryParamsToBoolean(isRevised);
  const session = ravenStore.openSession();
  const query = session.query<Question>({ collection: COLLECTION_NAME });

  if (limit) query.take(Number(limit));
  if (searchTerm) query.search("question", searchTerm);
  const skip = Number(page) * Number(limit);
  if (skip) query.skip(skip);

  if (!loggedinUserId) query.randomOrdering();
  else {
    const userCorrectAnswersIds = await session
      .query<UserCorrectAnswer>({
        collection: "UserCorrectAnswers",
      })
      .selectFields(["questionId"])
      .whereEquals("userId", loggedinUserId)
      .all();

    const docIdsToFilter = userCorrectAnswersIds.map(id =>
      setIdToCollectionName(COLLECTION_NAME, id as unknown as string)
    );
    query.not().whereIn("id()", docIdsToFilter);
  }
  

  const questions = await query.all();
  for (const question of questions) question.id = trimCollectionNameFromId(question.id);
  return questions;
}

Will generate a query with search("question", $p0) or not where("id()", ...)

Should be and not...

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions