forked from HKUDS/LightRAG
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
6d27401
commit d8ba7c5
Showing
4 changed files
with
60 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
import os | ||
from tqdm.asyncio import tqdm as tqdm_async | ||
from dataclasses import dataclass | ||
from pymongo import MongoClient | ||
|
||
from lightrag.utils import logger | ||
|
||
from lightrag.base import BaseKVStorage | ||
|
||
|
||
@dataclass | ||
class MongoKVStorage(BaseKVStorage): | ||
def __post_init__(self): | ||
client = MongoClient( | ||
os.environ.get("MONGO_URI", "mongodb://root:root@localhost:27017/") | ||
) | ||
database = client.get_database(os.environ.get("MONGO_DATABASE", "LightRAG")) | ||
self._data = database.get_collection(self.namespace) | ||
logger.info(f"Use MongoDB as KV {self.namespace}") | ||
|
||
async def all_keys(self) -> list[str]: | ||
return [x["_id"] for x in self._data.find({}, {"_id": 1})] | ||
|
||
async def get_by_id(self, id): | ||
return self._data.find_one({"_id": id}) | ||
|
||
async def get_by_ids(self, ids, fields=None): | ||
if fields is None: | ||
return list(self._data.find({"_id": {"$in": ids}})) | ||
return list( | ||
self._data.find( | ||
{"_id": {"$in": ids}}, | ||
{field: 1 for field in fields}, | ||
) | ||
) | ||
|
||
async def filter_keys(self, data: list[str]) -> set[str]: | ||
existing_ids = [ | ||
str(x["_id"]) for x in self._data.find({"_id": {"$in": data}}, {"_id": 1}) | ||
] | ||
return set([s for s in data if s not in existing_ids]) | ||
|
||
async def upsert(self, data: dict[str, dict]): | ||
for k, v in tqdm_async(data.items(), desc="Upserting"): | ||
self._data.update_one({"_id": k}, {"$set": v}, upsert=True) | ||
data[k]["_id"] = k | ||
return data | ||
|
||
async def drop(self): | ||
""" """ | ||
pass |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,6 +12,7 @@ ollama | |
openai | ||
oracledb | ||
pymilvus | ||
pymongo | ||
pyvis | ||
tenacity | ||
# lmdeploy[all] | ||
|