php – MongoDB:只有$addToSet / $push文件尚不存在
发布时间:2020-12-13 13:12:25 所属栏目:PHP教程 来源:网络整理
导读:我有一个列表集合,其中每个文档都有一个成员数组.成员数组的每个元素都是一个包含电子邮件属性,创建日期属性和其他元数据的文档.我在members.email上有一个唯一的索引,以防止同一个电子邮件被输入同一个列表两次,但我想保留原始日期值.不幸的是,$addToSet和$
我有一个列表集合,其中每个文档都有一个成员数组.成员数组的每个元素都是一个包含电子邮件属性,创建日期属性和其他元数据的文档.我在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()并查找卷曲/结果中的方括号(“{}”或“[]”). 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |