Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查询中的Mongodb$数组不工作_Mongodb_Mongodb Query - Fatal编程技术网

查询中的Mongodb$数组不工作

查询中的Mongodb$数组不工作,mongodb,mongodb-query,Mongodb,Mongodb Query,下面是mongo db中文档的模式 { "_id" : ObjectId("55d9a2f467d16f15a886a532"), "Author" : "RYTnirY", "Title" : "MZDCGMyXLV", "Content" : "HotEXFcyjaipabbAXAkKR", "Tags" : [ "oHE,SJx,FMQ" ], "CreatedAtUtc" : ISODate("2015-08-23

下面是mongo db中文档的模式

{
    "_id" : ObjectId("55d9a2f467d16f15a886a532"),
    "Author" : "RYTnirY",
    "Title" : "MZDCGMyXLV",
    "Content" : "HotEXFcyjaipabbAXAkKR",
    "Tags" : [ 
        "oHE,SJx,FMQ"
    ],
    "CreatedAtUtc" : ISODate("2015-08-23T10:39:48.766Z"),
    "Comments" : [ 
        {
            "Author" : "RWfSxDZ",
            "Content" : "TvYfJzLtIeaIdrxdsbQ",
            "CreatedAtUtc" : Date(-62135596800000)
        }, 
        {
            "Author" : "RFmUqfD",
            "Content" : "lHpUwrLnzXMSFtpGmo",
            "CreatedAtUtc" : Date(-62135596800000)
        }
    ]
}
我想查找所有带有特定标记的文档,例如仅oHE或oHE、SJx。我找不到正确的查询

db.poss.find({ Tags: { $in: { [ "oHE","SJx" ] } }})

您将标记存储为单个数组项
[“oHE、SJx、FMQ”]
而不是多个项
[“oHE”、“SJx、FMQ”]
,这就是查询无法工作的原因

您可以使用下面的代码将标记字符串转换为数组:

var cursor = db.poss.find();
while (cursor.hasNext()) {
  var x = cursor.next();
  var tags = x['Tags'][0];
  print("Before: "+x['Tags']);
  x['Tags'] = tags.split(',');
  print("After: "+x['Tags']);
  db.poss.update({_id : x._id}, x);
}


您将标记存储为单个数组项
[“oHE、SJx、FMQ”]
而不是多个项
[“oHE”、“SJx、FMQ”]
,这就是查询无法工作的原因

您可以使用下面的代码将标记字符串转换为数组:

var cursor = db.poss.find();
while (cursor.hasNext()) {
  var x = cursor.next();
  var tags = x['Tags'][0];
  print("Before: "+x['Tags']);
  x['Tags'] = tags.split(',');
  print("After: "+x['Tags']);
  db.poss.update({_id : x._id}, x);
}


您将标记存储为单个数组项
[“oHE、SJx、FMQ”]
而不是多个项
[“oHE”、“SJx、FMQ”]
,这就是查询无法工作的原因

您可以使用下面的代码将标记字符串转换为数组:

var cursor = db.poss.find();
while (cursor.hasNext()) {
  var x = cursor.next();
  var tags = x['Tags'][0];
  print("Before: "+x['Tags']);
  x['Tags'] = tags.split(',');
  print("After: "+x['Tags']);
  db.poss.update({_id : x._id}, x);
}


您将标记存储为单个数组项
[“oHE、SJx、FMQ”]
而不是多个项
[“oHE”、“SJx、FMQ”]
,这就是查询无法工作的原因

您可以使用下面的代码将标记字符串转换为数组:

var cursor = db.poss.find();
while (cursor.hasNext()) {
  var x = cursor.next();
  var tags = x['Tags'][0];
  print("Before: "+x['Tags']);
  x['Tags'] = tags.split(',');
  print("After: "+x['Tags']);
  db.poss.update({_id : x._id}, x);
}


首先-将其改为
[“oHE”、“SJx”、“FMQ”]
,而不是
[“oHE、SJx、FMQ”]

然后将查询更改为
db.poss.find({Tags:{$in:[“oHE”,“SJx”]}})

首先-使其
[“oHE”,“SJx”,“FMQ”]
而不是
[“oHE,SJx,FMQ”]

然后将查询更改为
db.poss.find({Tags:{$in:[“oHE”,“SJx”]}})

首先-使其
[“oHE”,“SJx”,“FMQ”]
而不是
[“oHE,SJx,FMQ”]

然后将查询更改为
db.poss.find({Tags:{$in:[“oHE”,“SJx”]}})

首先-使其
[“oHE”,“SJx”,“FMQ”]
而不是
[“oHE,SJx,FMQ”]
。 然后将查询更改为
db.poss.find({Tags:{$in:[“oHE”,“SJx”]})

最好的方法是使用操作

var bulk=db.poss.initializeOrderedBulkOp(),
计数=0;
db.poss.find().forEach(函数(doc){
var tag=doc.Tags[0]。拆分(“,”);
bulk.find({“\u id”:doc.\u id}).updateOne({
“$set”:{“Tags”:tag}
}); 
计数++;
如果(计数%500==0){
//每500次操作执行一次并重新初始化
bulk.execute();
bulk=db.poss.initializeOrderedBulkOp();
} 
})
//清理队列
如果(计数%500!=0)
bulk.execute()
然后,您的数据如下所示:

{
“_id”:ObjectId(“55d9a2f467d16f15a886a532”),
“作者”:“RYTnirY”,
“标题”:“MZDCGMyXLV”,
“内容”:“hotexfcyjaipabaxakkr”,
“标签”:[
“oHE”,
“SJx”,
“FMQ”
],
“CreatedAtUtc”:ISODate(“2015-08-23T10:39:48.766Z”),
“评论”:[
{
“作者”:“RWfSxDZ”,
“内容”:“TvYfJzLtIeaIdrxdsbQ”,
“CreatedAtUtc”:“2015年8月23日星期日15:22:04 GMT+0300(MSK)”
},
{
“作者”:“RFmUqfD”,
“内容”:“lHpUwrLnzXMSFtpGmo”,
“CreatedAtUtc”:“2015年8月23日星期日15:22:04 GMT+0300(MSK)”
}
]
}
现在您的查询:

db.poss.find({“Tags”:{“$in”:[“oHE”,“SJx”]})
最好的方法是使用操作

var bulk=db.poss.initializeOrderedBulkOp(),
计数=0;
db.poss.find().forEach(函数(doc){
var tag=doc.Tags[0]。拆分(“,”);
bulk.find({“\u id”:doc.\u id}).updateOne({
“$set”:{“Tags”:tag}
}); 
计数++;
如果(计数%500==0){
//每500次操作执行一次并重新初始化
bulk.execute();
bulk=db.poss.initializeOrderedBulkOp();
} 
})
//清理队列
如果(计数%500!=0)
bulk.execute()
然后,您的数据如下所示:

{
“_id”:ObjectId(“55d9a2f467d16f15a886a532”),
“作者”:“RYTnirY”,
“标题”:“MZDCGMyXLV”,
“内容”:“hotexfcyjaipabaxakkr”,
“标签”:[
“oHE”,
“SJx”,
“FMQ”
],
“CreatedAtUtc”:ISODate(“2015-08-23T10:39:48.766Z”),
“评论”:[
{
“作者”:“RWfSxDZ”,
“内容”:“TvYfJzLtIeaIdrxdsbQ”,
“CreatedAtUtc”:“2015年8月23日星期日15:22:04 GMT+0300(MSK)”
},
{
“作者”:“RFmUqfD”,
“内容”:“lHpUwrLnzXMSFtpGmo”,
“CreatedAtUtc”:“2015年8月23日星期日15:22:04 GMT+0300(MSK)”
}
]
}
现在您的查询:

db.poss.find({“Tags”:{“$in”:[“oHE”,“SJx”]})
最好的方法是使用操作

var bulk=db.poss.initializeOrderedBulkOp(),
计数=0;
db.poss.find().forEach(函数(doc){
var tag=doc.Tags[0]。拆分(“,”);
bulk.find({“\u id”:doc.\u id}).updateOne({
“$set”:{“Tags”:tag}
}); 
计数++;
如果(计数%500==0){
//每500次操作执行一次并重新初始化
bulk.execute();
bulk=db.poss.initializeOrderedBulkOp();
} 
})
//清理队列
如果(计数%500!=0)
bulk.execute()
然后,您的数据如下所示:

{
“_id”:ObjectId(“55d9a2f467d16f15a886a532”),
“作者”:“RYTnirY”,
“标题”:“MZDCGMyXLV”,
“内容”:“hotexfcyjaipabaxakkr”,
“标签”:[
“oHE”,
“SJx”,
“FMQ”
],
“CreatedAtUtc”:ISODate(“2015-08-23T10:39:48.766Z”),
“评论”:[
{
“作者”:“RWfSxDZ”,
“内容”:“TvYfJzLtIeaIdrxdsbQ”,
“CreatedAtUtc”:“2015年8月23日星期日15:22:04 GMT+0300(MSK)”
},