如何传递不带';与集合中的任何文档都不匹配-MongoDB?

如何传递不带';与集合中的任何文档都不匹配-MongoDB?,mongodb,Mongodb,当我尝试使用该方法插入新文档时 db.collection.findOneAndReplace({_id : NaN}, {"name" : "department"}, { upsert : true, returnNewDocument: true }) 我在这里使用{u id:NaN},这样就没有文档匹配了 它不创建具有有效id的文档,而是创建id为NaN { _id : NAN, name: "department" } 我怎样才能得到一个有效的身份证?或者我的方法参

当我尝试使用该方法插入新文档时

db.collection.findOneAndReplace({_id : NaN}, {"name" : "department"},  {    upsert : true, returnNewDocument: true })
我在这里使用
{u id:NaN}
,这样就没有文档匹配了

它不创建具有有效id的文档,而是创建id为
NaN

{
  _id : NAN,
  name: "department"
}


我怎样才能得到一个有效的身份证?或者我的方法参数中有错误吗?

您可以执行
{u id:{$exists:false}}
,这样它就不会匹配任何文档。然而,这仍然是一个奇怪的操作,因为仅对
插入操作使用
upsert
是没有意义的


如果您需要一个新文档,并且该文档可能存在,您需要更新它(或者创建一个新文档),我建议您尝试一下。

似乎您使用了错误的方法来做您想要的事情。为什么要使用
findOneAndReplace
并故意使其无法找到?要插入记录吗?如果不希望它替换任何内容,为什么要使用upsert?为什么不直接添加记录?\ mongodb中的id是行的唯一标识。除非你有严格的要求,否则最好不要玩它或改变它的价值。你应该直接插入记录以获得有效的_id。我正在开发一个elixir应用程序。。。在一些示例中,我找到了这个方法
{:ok,user}=Mongo.find_one_和{u replace(:Mongo,“users”,%{},changeset_new_user.changes,[return_document::after,upsert::true])
插入一个新文档,其中
%{}
是始终返回集合中所有文档的过滤器。。。然后集合中的第一个文档将替换为当前的新文档。。。所以我使用了
{u id:NaN}
,它不返回任何文档