php – MongoDB:只有$addToSet / $push文件尚不存在

前端之家收集整理的这篇文章主要介绍了php – MongoDB:只有$addToSet / $push文件尚不存在前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个列表集合,其中每个文档都有一个成员数组.成员数组的每个元素都是一个包含电子邮件属性,创建日期属性和其他元数据的文档.我在members.email上有一个唯一的索引,以防止同一个电子邮件被输入同一个列表两次,但我想保留原始日期值.不幸的是,$addToSet和$push似乎都没有这样做.

使用$push的示例:

$lists->update(array('_id' => $list['_id'],'members.email' => array('$ne' => $email)),array('$push' => array('members' => array(
    'email' => $email,'date' => new MongoDate(),// etc.
))));

并使用$addToSet:

$lists->update(array('_id' => $list['_id']),array('$addToSet' => array('members' => array(
    'email' => $email,// etc.
))));

由于(我假设)唯一的日期值,这两个示例都用新的替换整个嵌入文档.如果members.email尚不存在,或者我需要在两个命令中执行此操作,是否可以仅$$推送“成员”文档?

或者,将成员放在具有类似parent_list的属性的自己的集合中会更好地实现可伸缩性吗?

根据我的经验,您不能“$push”或“$addToSet”的原因是因为您的目标“成员”可能是一个嵌入对象(或在创建后转换为一个).你只能在嵌入式阵列上使用$push,$pushAll,$addToSet ……

不幸的是,对于我们PHP开发人员来说,游标查询总是将数据作为数组返回,检查“member”之类的东西是否是数组或对象的最佳方法是在mongo shell中运行find()并查找卷曲/结果中的方括号(“{}”或“[]”).

希望这可以帮助.

猜你在找的PHP相关文章