我不确定MongoDB是否可以实现这一点。我找不到任何东西。
所以我的结构如下:
{ "_id" : ObjectId("53cda1b0e03ab68fd4d8eb5e"),
"radio_id" : "aoeuoae",
"user_id" : "aoeuaoe",
"email" : "",
"songs" :
[ { "song_id" : ObjectId("53cda1b0e03ab68fd4d8eb5f"),
"added" : ISODate("2014-07-21T23:26:40.499Z"),
"liked" : 0,
"listened" : false },
{ "song_id" : ObjectId("53cda1b0e03ab68fd4d8eb60"),
"added" : ISODate("2014-07-21T23:26:40.499Z"),
"liked" : 0,
"listened" : false }]}
因此歌曲会继续添加,而song_id会引用另一组歌曲。
我想要做的是让song_id在歌曲数组中独一无二。所以如果你试图添加另一个元素,如:
"song_id" : ObjectId("53cda1b0e03ab68fd4d8eb60"),
"added" : ISODate("2014-07-21T23:26:40.499Z"),
"liked" : 0,
"listened" : false }
所以我可能会推出类似的东西:
> db.users.update({'email':'jordan@howlett.io'}, {$push: {'songs': {'song_id': ObjectId("53cda1b0e03ab68fd4d8eb64")}}})
它不会起作用。
这可能吗?感谢。
答案 0 :(得分:2)
这是我过去最好的解决方法。有两个电话。
found = db.col.find( {/*query*/}).count()
if found = 0:
// update
db.col.insert(storage_dict)
else:
db.col.update({/*find the subdocument*/},{"$set":{'title : "Foo"}})
您也可以使用upsert参数“播放”,但我不建议使用像这样的子文档。