cyremurC
Convex Community14mo ago
4 replies
cyremur

Index on optional nested properties

Is there a reason that on the schema:
export const vGameState = v.object({
  playerOne: v.optional(
    v.object({ userId: v.id("users"), username: v.string() })
  ),
  playerOneId: v.optional(v.id("users")),
  playerTwo: v.optional(
    v.object({ userId: v.id("users"), username: v.string() })
  ),
  playerTwoId: v.optional(v.id("users")),
});

with indices
export default defineSchema({
  games: defineTable(vGameState)
    .index("by_player_one", ["playerOneId"])
    .index("by_player_one_nested", ["playerOne.userId"])
    .index("by_player_two", ["playerTwoId"])
    .index("by_player_two_nested", ["playerTwo.userId"]),
});


I can do
    const games1 = await ctx.db
      .query("games")
      .withIndex("by_player_one", (q) => q.eq("playerOneId", userId))
      .order("desc")
      .collect();


But the nested one gets a type error?
    const games1_nested = await ctx.db
      .query("games")
      .withIndex("by_player_one_nested", (q) =>
        q.eq("playerOne.userId", userId)
      )
      .order("desc")
      .collect();
image.png
Was this page helpful?