0
我正在製作一個使用Mongoengine(MongoDB)和Flask的API。Mongoengine - 選擇錯誤
我有一個問題。我有一個MongoDB的集合 - 模式:
class Word(EmbeddedDocument):
word_id = IntField()
word = StringField()
translation = StringField()
strength = IntField()
meta = {'collection': 'users'}
def to_dict(self):
return mongo_to_dict(self)
class User(Document):
user_id = IntField()
username = StringField()
email = EmailField()
password = StringField()
words = ListField(EmbeddedDocumentField(Word))
meta = {'collection': 'users',
'ordering': ['-user_id']
我可以顯示文字與URL API /用戶/ XXX /詞word_id/ 當我刪除字id爲5,和收藏看起來像這樣
[
{
"username": "xxx",
"password": "yyy",
"words": [
{
"translation": "ajlkjbc",
"strength": 1,
"word": "abjlkc",
"word_id": 1
},
{
"translation": "ajlkjbc",
"strength": 1,
"word": "ahkjc",
"word_id": 2
},
{
"translation": "aklbc",
"strength": 5,
"word": "jklc",
"word_id": 3
},
{
"translation": "afdfsc",
"strength": 1,
"word": "acjj",
"word_id": 4
},
{
"translation": "dsadf",
"strength": 1,
"word": "dvdsf",
"word_id": 6
}
]
}
]
問題是,當我去的網址API /用戶/ XXX /字/ 6 它不起作用。
我給這URL編碼
@app.route('/api/users/<username>/words/<int:word_id>', methods=['GET'])
def get_words(username):
user = User.objects(username=username)
l_user = user.to_json()
decoded = json.loads(l_user)
return Response(json.dumps(decoded[0]["words"][word_id-1], sort_keys=False, indent=4),
mimetype='application/json')
,如果我在中間刪除一些詞,因爲這是行不通的。
是不是word_id還是6?你必須得到價值或在列表中保持嚴格的秩序...我不認爲你可以混合兩種... –
是的,這是問題所在。我想保持word_id一樣。所以當我想用word_id 4刪除單詞時,我想保留其他單詞,因爲單詞與客戶端(Backbone集合)同步。因此,當我想要例如刪除URL api/words/xxx/words/6這個已經在客戶端中的單詞時,它將不起作用,因爲它在數據庫中會有所不同。如果你的解決方案是我有100個單詞,並且我想用word_id 50刪除單詞,我必須重寫50個單詞,然後我必須再次將我的新單詞發送給客戶端,並再次在客戶端上重寫模型。我認爲這很耗時 – SamuelMatis