docs/components/vectordbs/dbs/neon.mdx
Use Neon as a vector store in Mem0, powered by PostgreSQL and the pgvector extension.
Neon is a serverless Postgres platform. Since Mem0 supports Postgres through the
pgvector provider, Neon can be used with a standard Postgres connection string.
from dotenv import load_dotenv from mem0 import Memory
load_dotenv()
config = { "vector_store": { "provider": "pgvector", "config": { "connection_string": os.environ["DATABASE_URL"], "collection_name": "memories", "embedding_model_dims": 1536, "hnsw": True, }, }, }
m = Memory.from_config(config) messages = [ {"role": "user", "content": "I'm planning to watch a movie tonight. Any recommendations?"}, {"role": "assistant", "content": "How about thriller movies? They can be quite engaging."}, {"role": "user", "content": "I'm not a big fan of thriller movies but I love sci-fi movies."}, {"role": "assistant", "content": "Got it! I'll avoid thriller recommendations and suggest sci-fi movies in the future."}, ] m.add(messages, user_id="alice", metadata={"category": "movies"})
results = m.search( "What movies should I recommend?", filters={"user_id": "alice"}, )
print(results)
```typescript TypeScript
import "dotenv/config";
import { Memory } from "mem0ai/oss";
const databaseUrl = new URL(process.env.DATABASE_URL!);
const m = new Memory({
vectorStore: {
provider: "pgvector",
config: {
user: decodeURIComponent(databaseUrl.username),
password: decodeURIComponent(databaseUrl.password),
host: databaseUrl.hostname,
port: Number(databaseUrl.port || 5432),
dbname: databaseUrl.pathname.slice(1) || "neondb",
collectionName: "memories",
dimension: 1536,
embeddingModelDims: 1536,
hnsw: true,
},
},
});
const messages = [
{ role: "user" as const, content: "I'm planning to watch a movie tonight. Any recommendations?" },
{ role: "assistant" as const, content: "How about thriller movies? They can be quite engaging." },
{ role: "user" as const, content: "I'm not a big fan of thriller movies but I love sci-fi movies." },
{ role: "assistant" as const, content: "Got it! I'll avoid thriller recommendations and suggest sci-fi movies in the future." },
];
await m.add(messages, {
userId: "alice",
metadata: { category: "movies" },
});
const results = await m.search("What movies should I recommend?", {
filters: { user_id: "alice" },
});
console.log(results);
You don't need to run any SQL migrations. Mem0 creates the collection table when it initializes the pgvector store.
OPENAI_API_KEY=sk-xx...
DATABASE_URL=postgresql://user:[email protected]/neondb?sslmode=require
| Parameter | Description | Default |
|---|---|---|
user | Database user. | Required |
password | Database password. | Required |
host | Database host. | Required |
port | Database port. | 5432 |
dbname | Database name. | vector_store |
collectionName | Name for the vector collection. | memories |
dimension | Vector dimension for Mem0 config. | Auto-detected |
embeddingModelDims | Embedding model dimensions for table creation. | Required |
hnsw | Enables HNSW indexing. | false |
The pgvector provider can create an HNSW index for faster vector search.
hnsw to true to enable a Hierarchical Navigable Small World index.hnsw as false if you want to create or manage indexes yourself.The pgvector provider uses cosine similarity for vector search. Make sure your
embedding dimensions match the configured embedding_model_dims value.
Index Selection:
hnsw for faster search performance when memory usage is not a constraintConnection String:
postgresql://user:password@host:port/database